Bug#1059609: bookworm-pu: package engrampa/1.26.0-1+deb12u1
Package: release.debian.org
Severity: normal
Tags: bookworm
User: release.debian.org@packages.debian.org
Usertags: pu
X-Debbugs-Cc: engrampa@packages.debian.org
Control: affects -1 + src:engrampa
[ Reason ]
While upload a new upstream version of engrampa, a bookworm-pu has been
prepared that fixes various memleaks and resolves a bug in the archive
"save as" action.
[ Impact ]
Engrampa will still have memleaks + the save as dialog will still be
broken.
[ Tests ]
Manually. A new dialog box has been added by upstream. This will
only be presented to the users in English (as the translations
have not been cherry-picked into this package).
[ Risks ]
Regressions might occur, affecting engrampa and in general MATE desktop
users.
[ Checklist ]
[x] *all* changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in (old)stable
[x] the issue is verified as fixed in unstable
[ Changes ]
+ * debian/patches:
+ + Cherry-pick various memleak fixes from upstream:
+ 0001_dlg-package-installer-fix-memory-leak.patch,
+ 0002_fr-window-fix-memory-leak.patch,
+ 0003_file-data-fix-memory-leak.patch, and
+ 0005_fr-process-fix-memory-leak.patch.
+ + Add 0004_Fix-archive-file-save-as-function.patch. Fix archive 'save as'
+ function. (Closes: #969761).
[ Other info ]
None.
diff -Nru engrampa-1.26.0/debian/changelog engrampa-1.26.0/debian/changelog
--- engrampa-1.26.0/debian/changelog 2021-12-12 16:00:52.000000000 +0100
+++ engrampa-1.26.0/debian/changelog 2023-12-29 08:13:22.000000000 +0100
@@ -1,3 +1,16 @@
+engrampa (1.26.0-1+deb12u1) bookworm; urgency=medium
+
+ * debian/patches:
+ + Cherry-pick various memleak fixes from upstream:
+ 0001_dlg-package-installer-fix-memory-leak.patch,
+ 0002_fr-window-fix-memory-leak.patch,
+ 0003_file-data-fix-memory-leak.patch, and
+ 0005_fr-process-fix-memory-leak.patch.
+ + Add 0004_Fix-archive-file-save-as-function.patch. Fix archive 'save as'
+ function. (Closes: #969761).
+
+ -- Mike Gabriel <sunweaver@debian.org> Fri, 29 Dec 2023 08:13:22 +0100
+
engrampa (1.26.0-1) unstable; urgency=medium
[ Martin Wimpress ]
diff -Nru engrampa-1.26.0/debian/patches/0001_dlg-package-installer-fix-memory-leak.patch engrampa-1.26.0/debian/patches/0001_dlg-package-installer-fix-memory-leak.patch
--- engrampa-1.26.0/debian/patches/0001_dlg-package-installer-fix-memory-leak.patch 1970-01-01 01:00:00.000000000 +0100
+++ engrampa-1.26.0/debian/patches/0001_dlg-package-installer-fix-memory-leak.patch 2023-12-29 08:03:51.000000000 +0100
@@ -0,0 +1,38 @@
+From da64dd31f77a8082650d0904da19a21dfc400ae1 Mon Sep 17 00:00:00 2001
+From: rbuj <robert.buj@gmail.com>
+Date: Thu, 21 Oct 2021 20:12:17 +0200
+Subject: [PATCH 1/5] dlg-package-installer: fix memory leak
+
+Signed-off-by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+---
+ src/dlg-package-installer.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+diff --git a/src/dlg-package-installer.c b/src/dlg-package-installer.c
+index 0b18441..3cda168 100644
+--- a/src/dlg-package-installer.c
++++ b/src/dlg-package-installer.c
+@@ -305,9 +305,11 @@ dlg_package_installer (FrWindow *window,
+ {
+ char *secondary_text;
+ GtkWidget *dialog;
++ char *description;
+
++ description = g_content_type_get_description (idata->archive->content_type);
+ secondary_text = g_strdup_printf (_("There is no command installed for %s files.\nDo you want to search for a command to open this file?"),
+- g_content_type_get_description (idata->archive->content_type));
++ description);
+ dialog = _gtk_message_dialog_new (GTK_WINDOW (idata->window),
+ GTK_DIALOG_MODAL,
+ "dialog-error",
+@@ -328,6 +330,7 @@ dlg_package_installer (FrWindow *window,
+ g_signal_connect (dialog, "response", G_CALLBACK (confirm_search_dialog_response_cb), idata);
+ gtk_widget_show (dialog);
+
++ g_free (description);
+ g_free (secondary_text);
+ }
+
+--
+2.39.2
+
diff -Nru engrampa-1.26.0/debian/patches/0002_fr-window-fix-memory-leak.patch engrampa-1.26.0/debian/patches/0002_fr-window-fix-memory-leak.patch
--- engrampa-1.26.0/debian/patches/0002_fr-window-fix-memory-leak.patch 1970-01-01 01:00:00.000000000 +0100
+++ engrampa-1.26.0/debian/patches/0002_fr-window-fix-memory-leak.patch 2023-12-29 08:03:51.000000000 +0100
@@ -0,0 +1,81 @@
+From c0fadd464f227e7ebbfefd3fa54e578f1bb9998b Mon Sep 17 00:00:00 2001
+From: rbuj <robert.buj@gmail.com>
+Date: Thu, 21 Oct 2021 21:34:05 +0200
+Subject: [PATCH 2/5] fr-window: fix memory leak
+
+Signed-off-by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+---
+ src/fr-window.c | 13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/src/fr-window.c b/src/fr-window.c
+index 9a30f5e..b5b5cff 100644
+--- a/src/fr-window.c
++++ b/src/fr-window.c
+@@ -560,6 +560,7 @@ fr_window_free_private_data (FrWindow *window)
+ g_free (window->priv->add_default_dir);
+ g_free (window->priv->extract_default_dir);
+ g_free (window->priv->archive_uri);
++ g_free (window->priv->working_archive);
+
+ g_free (window->priv->password);
+ g_free (window->priv->password_for_paste);
+@@ -981,7 +982,7 @@ sort_by_type (gconstpointer ptr1,
+ FileData *fdata1 = *((FileData **) ptr1);
+ FileData *fdata2 = *((FileData **) ptr2);
+ int result;
+- const char *desc1, *desc2;
++ char *desc1, *desc2;
+
+ if (file_data_is_dir (fdata1) != file_data_is_dir (fdata2)) {
+ if (file_data_is_dir (fdata1))
+@@ -996,6 +997,9 @@ sort_by_type (gconstpointer ptr1,
+ desc2 = g_content_type_get_description (fdata2->content_type);
+
+ result = strcasecmp (desc1, desc2);
++ g_free (desc1);
++ g_free (desc2);
++
+ if (result == 0)
+ return sort_by_name (ptr1, ptr2);
+ else
+@@ -1560,7 +1564,7 @@ fr_window_populate_file_list (FrWindow *window,
+ char *utf8_path;
+ char *s_size;
+ char *s_time;
+- const char *desc;
++ char *desc;
+
+ utf8_path = g_filename_display_name (fdata->path);
+
+@@ -1583,6 +1587,7 @@ fr_window_populate_file_list (FrWindow *window,
+ g_free (utf8_path);
+ g_free (s_size);
+ g_free (s_time);
++ g_free (desc);
+ }
+ g_free (utf8_name);
+ if (icon != NULL)
+@@ -2414,9 +2419,10 @@ fr_window_working_archive_cb (FrCommand *command,
+ FrWindow *window)
+ {
+ g_free (window->priv->working_archive);
+- window->priv->working_archive = NULL;
+ if (archive_filename != NULL)
+ window->priv->working_archive = g_strdup (archive_filename);
++ else
++ window->priv->working_archive = NULL;
+ progress_dialog_update_action_description (window);
+
+ return TRUE;
+@@ -2875,6 +2881,7 @@ fr_window_add_to_recent_list (FrWindow *window,
+ recent_data->app_exec = "engrampa";
+ gtk_recent_manager_add_full (gtk_recent_manager_get_default (), uri, recent_data);
+
++ g_free (recent_data->mime_type);
+ g_free (recent_data);
+ }
+ else
+--
+2.39.2
+
diff -Nru engrampa-1.26.0/debian/patches/0003_file-data-fix-memory-leak.patch engrampa-1.26.0/debian/patches/0003_file-data-fix-memory-leak.patch
--- engrampa-1.26.0/debian/patches/0003_file-data-fix-memory-leak.patch 1970-01-01 01:00:00.000000000 +0100
+++ engrampa-1.26.0/debian/patches/0003_file-data-fix-memory-leak.patch 2023-12-29 08:03:51.000000000 +0100
@@ -0,0 +1,55 @@
+From 073c06814e0dcbb7bbdcecb867fc8c15d3fdddfa Mon Sep 17 00:00:00 2001
+From: rbuj <robert.buj@gmail.com>
+Date: Fri, 22 Oct 2021 10:30:10 +0200
+Subject: [PATCH 3/5] file-data: fix memory leak
+
+Signed-off-by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+---
+ src/file-data.c | 11 ++++++++---
+ src/fr-command-tar.c | 7 +++++--
+ 2 files changed, 13 insertions(+), 5 deletions(-)
+
+diff --git a/src/file-data.c b/src/file-data.c
+index 911a5e9..cc0832f 100644
+--- a/src/file-data.c
++++ b/src/file-data.c
+@@ -103,10 +103,15 @@ file_data_get_type (void)
+ void
+ file_data_update_content_type (FileData *fdata)
+ {
+- if (fdata->dir)
++ if (fdata->dir) {
+ fdata->content_type = MIME_TYPE_DIRECTORY;
+- else
+- fdata->content_type = get_static_string (g_content_type_guess (fdata->full_path, NULL, 0, NULL));
++ } else {
++ char *content_type;
++
++ content_type = g_content_type_guess (fdata->full_path, NULL, 0, NULL);
++ fdata->content_type = get_static_string (content_type);
++ g_free (content_type);
++ }
+ }
+
+
+diff --git a/src/fr-command-tar.c b/src/fr-command-tar.c
+index 50aae1a..6f7943f 100644
+--- a/src/fr-command-tar.c
++++ b/src/fr-command-tar.c
+@@ -140,8 +140,11 @@ process_line (char *line,
+ }
+ g_free (name);
+ name = g_filename_from_utf8 (fdata->original_path, -1, NULL, NULL, NULL);
+- if (name)
+- fdata->original_path = name;
++ if (name) {
++ fdata->original_path = g_strdup (name);
++ fdata->free_original_path = TRUE;
++ }
++ g_free (name);
+
+ if (fields[1] != NULL)
+ fdata->link = g_strdup (fields[1]);
+--
+2.39.2
+
diff -Nru engrampa-1.26.0/debian/patches/0004_Fix-archive-file-save-as-function.patch engrampa-1.26.0/debian/patches/0004_Fix-archive-file-save-as-function.patch
--- engrampa-1.26.0/debian/patches/0004_Fix-archive-file-save-as-function.patch 1970-01-01 01:00:00.000000000 +0100
+++ engrampa-1.26.0/debian/patches/0004_Fix-archive-file-save-as-function.patch 2023-12-29 08:03:51.000000000 +0100
@@ -0,0 +1,107 @@
+From a27a7a6de2d47f6d3ca558f6f980b03376ae5044 Mon Sep 17 00:00:00 2001
+From: zhuyaliang <15132211195@163.com>
+Date: Wed, 15 Mar 2023 10:57:07 +0800
+Subject: [PATCH 4/5] Fix archive file save as function
+
+Signed-off-by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+---
+ src/actions.c | 20 ++++++++++++++++++--
+ src/dlg-new.c | 2 ++
+ src/dlg-new.h | 1 +
+ src/fr-window.c | 2 +-
+ 4 files changed, 22 insertions(+), 3 deletions(-)
+
+diff --git a/src/actions.c b/src/actions.c
+index b55cab1..08bf4e0 100644
+--- a/src/actions.c
++++ b/src/actions.c
+@@ -203,6 +203,22 @@ get_archive_filename_from_selector (DlgNewData *data)
+ }
+ g_object_unref (info);
+ g_object_unref (dir);
++ if ((data->original_file != NULL) && (g_file_equal (file, data->original_file))) {
++ GtkWidget *dialog;
++ dialog = _gtk_error_dialog_new (GTK_WINDOW (data->dialog),
++ GTK_DIALOG_MODAL,
++ NULL,
++ _("Could not create the archive"),
++ "%s",
++ _("New name is the same as old one, please type other name."));
++ gtk_dialog_run (GTK_DIALOG (dialog));
++
++ gtk_widget_destroy (GTK_WIDGET (dialog));
++ g_object_unref (info);
++ g_object_unref (file);
++
++ return NULL;
++ }
+
+ /* if the user did not specify a valid extension use the filetype combobox current type
+ * or tar.gz if automatic is selected. */
+@@ -465,11 +481,11 @@ activate_action_save_as (GtkAction *action,
+ {
+ FrWindow *window = callback_data;
+ DlgNewData *data;
++ GFile *file = NULL;
+ char *archive_name = NULL;
+
+ if (fr_window_get_archive_uri (window)) {
+ const char *uri;
+- GFile *file;
+ GFileInfo *info;
+ GError *err = NULL;
+
+@@ -487,10 +503,10 @@ activate_action_save_as (GtkAction *action,
+ archive_name = g_strdup (g_file_info_get_display_name (info));
+
+ g_object_unref (info);
+- g_object_unref (file);
+ }
+
+ data = dlg_save_as (window, archive_name);
++ data->original_file = file;
+ g_signal_connect (G_OBJECT (data->dialog),
+ "response",
+ G_CALLBACK (save_file_response_cb),
+diff --git a/src/dlg-new.c b/src/dlg-new.c
+index 8b78561..2214574 100644
+--- a/src/dlg-new.c
++++ b/src/dlg-new.c
+@@ -42,6 +42,8 @@ static void
+ destroy_cb (GtkWidget *widget,
+ DlgNewData *data)
+ {
++ if (data->original_file != NULL)
++ g_object_unref (data->original_file);
+ g_free (data);
+ }
+
+diff --git a/src/dlg-new.h b/src/dlg-new.h
+index f4e0424..92f9194 100644
+--- a/src/dlg-new.h
++++ b/src/dlg-new.h
+@@ -36,6 +36,7 @@ typedef struct {
+ gboolean can_create_volumes;
+ GtkBuilder *builder;
+
++ GFile *original_file;
+ GtkWidget *dialog;
+ /*GtkWidget *n_archive_type_combo_box;*/
+ GtkWidget *n_other_options_expander;
+diff --git a/src/fr-window.c b/src/fr-window.c
+index b5b5cff..e098f54 100644
+--- a/src/fr-window.c
++++ b/src/fr-window.c
+@@ -6363,8 +6363,8 @@ fr_window_archive_save_as (FrWindow *window,
+ NULL,
+ window->priv->convert_data.temp_dir,
+ NULL,
+- TRUE,
+ FALSE,
++ TRUE,
+ FALSE,
+ window->priv->password);
+ fr_process_start (window->archive->process);
+--
+2.39.2
+
diff -Nru engrampa-1.26.0/debian/patches/0005_fr-process-fix-memory-leak.patch engrampa-1.26.0/debian/patches/0005_fr-process-fix-memory-leak.patch
--- engrampa-1.26.0/debian/patches/0005_fr-process-fix-memory-leak.patch 1970-01-01 01:00:00.000000000 +0100
+++ engrampa-1.26.0/debian/patches/0005_fr-process-fix-memory-leak.patch 2023-12-29 08:03:51.000000000 +0100
@@ -0,0 +1,92 @@
+From a74093d29170f1ce62038c43a1ba7449fb6030be Mon Sep 17 00:00:00 2001
+From: rbuj <robert.buj@gmail.com>
+Date: Sun, 30 Jan 2022 11:59:09 +0100
+Subject: [PATCH 5/5] fr-process: fix memory leak
+
+Signed-off-by: Mike Gabriel <mike.gabriel@das-netzwerkteam.de>
+---
+ src/fr-process.c | 35 +++++++++--------------------------
+ 1 file changed, 9 insertions(+), 26 deletions(-)
+
+diff --git a/src/fr-process.c b/src/fr-process.c
+index 892aaae..fa361e7 100644
+--- a/src/fr-process.c
++++ b/src/fr-process.c
+@@ -88,22 +88,16 @@ fr_command_info_new (void)
+
+
+ static void
+-fr_command_info_free (FrCommandInfo *info)
++fr_command_info_free (gpointer data)
+ {
++ FrCommandInfo *info = data;
++
+ if (info == NULL)
+ return;
+
+- if (info->args != NULL) {
+- g_list_free_full (info->args, g_free);
+- info->args = NULL;
+- }
+-
+- if (info->dir != NULL) {
+- g_free (info->dir);
+- info->dir = NULL;
+- }
+-
+- g_free (info);
++ g_list_free_full (info->args, g_free);
++ g_free (info->dir);
++ g_clear_pointer (&info, g_free);
+ }
+
+
+@@ -304,7 +298,7 @@ fr_process_init (FrProcess *process)
+
+ process->term_on_stop = TRUE;
+
+- process->priv->comm = g_ptr_array_new ();
++ process->priv->comm = g_ptr_array_new_with_free_func (fr_command_info_free);
+ process->priv->n_comm = -1;
+ process->priv->current_comm = -1;
+
+@@ -347,9 +341,8 @@ fr_process_finalize (GObject *object)
+ process = FR_PROCESS (object);
+
+ fr_process_stop_priv (process, FALSE);
+- fr_process_clear (process);
+
+- g_ptr_array_free (process->priv->comm, FALSE);
++ g_ptr_array_free (process->priv->comm, TRUE);
+
+ fr_channel_data_free (&process->out);
+ fr_channel_data_free (&process->err);
+@@ -397,9 +390,7 @@ fr_process_begin_command_at (FrProcess *process,
+ process->priv->current_comm = index;
+
+ old_c_info = g_ptr_array_index (process->priv->comm, index);
+-
+- if (old_c_info != NULL)
+- fr_command_info_free (old_c_info);
++ fr_command_info_free (old_c_info);
+
+ info = fr_command_info_new ();
+ info->args = g_list_prepend (NULL, g_strdup (arg));
+@@ -592,14 +583,6 @@ fr_process_clear (FrProcess *process)
+
+ g_return_if_fail (process != NULL);
+
+- for (i = 0; i <= process->priv->n_comm; i++) {
+- FrCommandInfo *info;
+-
+- info = g_ptr_array_index (process->priv->comm, i);
+- fr_command_info_free (info);
+- g_ptr_array_index (process->priv->comm, i) = NULL;
+- }
+-
+ for (i = 0; i <= process->priv->n_comm; i++)
+ g_ptr_array_remove_index_fast (process->priv->comm, 0);
+
+--
+2.39.2
+
diff -Nru engrampa-1.26.0/debian/patches/series engrampa-1.26.0/debian/patches/series
--- engrampa-1.26.0/debian/patches/series 1970-01-01 01:00:00.000000000 +0100
+++ engrampa-1.26.0/debian/patches/series 2023-12-29 08:12:05.000000000 +0100
@@ -0,0 +1,5 @@
+0001_dlg-package-installer-fix-memory-leak.patch
+0002_fr-window-fix-memory-leak.patch
+0003_file-data-fix-memory-leak.patch
+0004_Fix-archive-file-save-as-function.patch
+0005_fr-process-fix-memory-leak.patch
Reply to: