[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#598854: unblock: file-roller/2.30.2-2



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: freeze-exception

Please unblock hicolor-icon-theme for squeeze.

file-roller (2.30.2-2) unstable; urgency=low
 .
   * Only suggest lzma. Closes: #595117.
   * Include some patches sitting in the upstream repository:
     + 01_rar_crasher.patch: fix a crasher with the rar command.
     + 02_escape_newlines.patch: handle the case of files with newlines
       in their name.
     + 03_tar_xz_update.patch: update .tar.xz files without losing the
       data in them. Closes: #594839.

I’m attaching the patches. The third issue is arguably RC (data loss).

Cheers,
-- 
 .''`.      Josselin Mouette
: :' :
`. `'  “If you behave this way because you are blackmailed by someone,
  `-    […] I will see what I can do for you.”  -- Jörg Schilling
From bac5d03a29a411c79e0d838d48c404900d30066d Mon Sep 17 00:00:00 2001
From: Paolo Bacchilega <paobac@src.gnome.org>
Date: Fri, 25 Jun 2010 10:45:32 +0000
Subject: [rar] fixed seg fault when there is an extra info line in the output

---
diff --git a/src/fr-command-rar.c b/src/fr-command-rar.c
index 482ab57..2c42ba4 100644
--- a/src/fr-command-rar.c
+++ b/src/fr-command-rar.c
@@ -117,6 +117,59 @@ process_line (char     *line,
 		return;
 	}
 
+	if (! rar_comm->odd_line) {
+		FileData *fdata;
+
+		fdata = rar_comm->fdata;
+
+		/* read file info. */
+
+		fields = split_line (line, 6);
+		if (g_strv_length (fields) < 6) {
+			/* wrong line format, treat this line as a filename line */
+			g_strfreev (fields);
+			file_data_free (rar_comm->fdata);
+			rar_comm->fdata = NULL;
+			rar_comm->odd_line = TRUE;
+		}
+		else {
+			if ((strcmp (fields[2], "<->") == 0)
+			    || (strcmp (fields[2], "<--") == 0))
+			{
+				/* ignore files that span more volumes */
+
+				file_data_free (rar_comm->fdata);
+				rar_comm->fdata = NULL;
+			}
+			else {
+				fdata->size = g_ascii_strtoull (fields[0], NULL, 10);
+				fdata->modified = mktime_from_string (fields[3], fields[4]);
+
+				if ((fields[5][1] == 'D') || (fields[5][0] == 'd')) {
+					char *tmp;
+
+					tmp = fdata->full_path;
+					fdata->full_path = g_strconcat (fdata->full_path, "/", NULL);
+
+					fdata->original_path = g_strdup (fdata->original_path);
+					fdata->free_original_path = TRUE;
+
+					g_free (tmp);
+
+					fdata->name = dir_name_from_path (fdata->full_path);
+					fdata->dir = TRUE;
+				}
+				else
+					fdata->name = g_strdup (file_name_from_path (fdata->full_path));
+
+				fr_command_add_file (comm, fdata);
+				rar_comm->fdata = NULL;
+			}
+
+			g_strfreev (fields);
+		}
+	}
+
 	if (rar_comm->odd_line) {
 		FileData *fdata;
 
@@ -141,48 +194,7 @@ process_line (char     *line,
 		fdata->path = remove_level_from_path (fdata->full_path);
 	}
 	else {
-		FileData *fdata;
-
-		fdata = rar_comm->fdata;
-
-		/* read file info. */
-
-		fields = split_line (line, 6);
-
-		if ((strcmp (fields[2], "<->") == 0)
-		    || (strcmp (fields[2], "<--") == 0))
-		{
-			/* ignore files that span more volumes */
-
-			file_data_free (rar_comm->fdata);
-			rar_comm->fdata = NULL;
-		}
-		else {
-			fdata->size = g_ascii_strtoull (fields[0], NULL, 10);
-			fdata->modified = mktime_from_string (fields[3], fields[4]);
-
-			if ((fields[5][1] == 'D') || (fields[5][0] == 'd')) {
-				char *tmp;
-
-				tmp = fdata->full_path;
-				fdata->full_path = g_strconcat (fdata->full_path, "/", NULL);
-
-				fdata->original_path = g_strdup (fdata->original_path);
-				fdata->free_original_path = TRUE;
-
-				g_free (tmp);
-
-				fdata->name = dir_name_from_path (fdata->full_path);
-				fdata->dir = TRUE;
-			}
-			else
-				fdata->name = g_strdup (file_name_from_path (fdata->full_path));
-
-			fr_command_add_file (comm, fdata);
-			rar_comm->fdata = NULL;
-		}
 
-		g_strfreev (fields);
 	}
 
 	rar_comm->odd_line = ! rar_comm->odd_line;
--
cgit v0.8.3.1
From 2194eddd71a01f178defa1137d7fab01acedf44b Mon Sep 17 00:00:00 2001
From: Paolo Bacchilega <paobac@src.gnome.org>
Date: Tue, 06 Jul 2010 07:31:15 +0000
Subject: escape new lines in filenames when saving the file list to a file

---
diff --git a/src/fr-archive.c b/src/fr-archive.c
index ff71e92..83d0889 100644
--- a/src/fr-archive.c
+++ b/src/fr-archive.c
@@ -1160,12 +1160,17 @@ save_list_to_temp_file (GList   *file_list,
 		for (scan = file_list; scan != NULL; scan = scan->next) {
 			char *filename = scan->data;
 
+			filename = str_substitute (filename, "\n", "\\n");
 			if ((g_output_stream_write (G_OUTPUT_STREAM (ostream), filename, strlen (filename), NULL, error) < 0)
 			    || (g_output_stream_write (G_OUTPUT_STREAM (ostream), "\n", 1, NULL, error) < 0))
 			{
 				error_occurred = TRUE;
-				break;
 			}
+
+			g_free (filename);
+
+			if (error_occurred)
+				break;
 		}
 		if (! error_occurred && ! g_output_stream_close (G_OUTPUT_STREAM (ostream), NULL, error))
 			error_occurred = TRUE;
--
cgit v0.8.3.1
From c668bfe6175ed0891dd2a42bfe590a8adf7be8de Mon Sep 17 00:00:00 2001
From: Paolo Bacchilega <paobac@src.gnome.org>
Date: Fri, 03 Sep 2010 18:09:04 +0000
Subject: fixed update of files in .tar.xz archives

[bug #628717]
---
diff --git a/src/fr-command-tar.c b/src/fr-command-tar.c
index 53ab601..650a197 100644
--- a/src/fr-command-tar.c
+++ b/src/fr-command-tar.c
@@ -769,7 +769,7 @@ get_uncompressed_name (FrCommandTar *c_tar,
 		/* X.tar.xz --> X.tar
 		 * (There doesn't seem to be a shorthand suffix) */
 		if (file_extension_is (e_filename, ".tar.xz"))
-			new_name[l - 5] = 0;
+			new_name[l - 3] = 0;
 	}
 	else if (is_mime_type (comm->mime_type, "application/x-lzop-compressed-tar")) {
 		/* X.tzo     -->  X.tar
--
cgit v0.8.3.1

Attachment: signature.asc
Description: This is a digitally signed message part


Reply to: