Package: release.debian.org Severity: normal Tags: bookworm User: release.debian....@packages.debian.org Usertags: pu X-Debbugs-Cc: mate-screensa...@packages.debian.org Control: affects -1 + src:mate-screensaver
Two memory leaks were resolved upstream and cherry-picked into this bookworm-pu. [ Reason ] In mate-screensaver's preferences tool two memory leaks were discovered and resolved by upstream. [ Impact ] Memleaks persist for mate-screensaver in bookworm if this upload gets rejected. [ Tests ] Manual smoke test. [ Risks ] Possible regression. Users of mate-screensaver will be affected. [ 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: + + Add 0001_mate-screensaver-preferences-fix-memory-leak.patch and + 0002_mate-screensaver-preferences-fix-memory-leak.patch, fixing two + memleaks in the preferences tool of mate-screensaver. [ Other info ] None.
diff -Nru mate-screensaver-1.26.1/debian/changelog mate-screensaver-1.26.1/debian/changelog --- mate-screensaver-1.26.1/debian/changelog 2021-12-14 07:45:02.000000000 +0100 +++ mate-screensaver-1.26.1/debian/changelog 2023-12-27 15:32:39.000000000 +0100 @@ -1,3 +1,12 @@ +mate-screensaver (1.26.1-1+deb12u1) bookworm; urgency=medium + + * debian/patches: + + Add 0001_mate-screensaver-preferences-fix-memory-leak.patch and + 0002_mate-screensaver-preferences-fix-memory-leak.patch, fixing two + memleaks in the preferences tool of mate-screensaver. + + -- Mike Gabriel <sunwea...@debian.org> Wed, 27 Dec 2023 15:32:39 +0100 + mate-screensaver (1.26.1-1) unstable; urgency=medium * New upstream release. diff -Nru mate-screensaver-1.26.1/debian/patches/0001_mate-screensaver-preferences-fix-memory-leak.patch mate-screensaver-1.26.1/debian/patches/0001_mate-screensaver-preferences-fix-memory-leak.patch --- mate-screensaver-1.26.1/debian/patches/0001_mate-screensaver-preferences-fix-memory-leak.patch 1970-01-01 01:00:00.000000000 +0100 +++ mate-screensaver-1.26.1/debian/patches/0001_mate-screensaver-preferences-fix-memory-leak.patch 2023-12-27 15:30:26.000000000 +0100 @@ -0,0 +1,198 @@ +From 8c12ca79d237a36e7d41a644b24c0753cafc968c Mon Sep 17 00:00:00 2001 +From: rbuj <robert....@gmail.com> +Date: Fri, 22 Oct 2021 17:24:56 +0200 +Subject: [PATCH 1/2] mate-screensaver-preferences: fix memory leak + +Signed-off-by: Mike Gabriel <mike.gabr...@das-netzwerkteam.de> +--- + src/mate-screensaver-preferences.c | 125 +++++++++++++++-------------- + 1 file changed, 64 insertions(+), 61 deletions(-) + +diff --git a/src/mate-screensaver-preferences.c b/src/mate-screensaver-preferences.c +index 3c7621a..46e780e 100644 +--- a/src/mate-screensaver-preferences.c ++++ b/src/mate-screensaver-preferences.c +@@ -934,10 +934,14 @@ drag_data_received_cb (GtkWidget *widget, + static char * + time_to_string_text (long time) + { +- char *secs, *mins, *hours, *string; +- int sec, min, hour; +- +- int n, inc_len, len_minutes; ++ char *secs, *mins, *hours, *string; ++ char *chk_hour_str, *chk_minute_str, *chk_hour_minute_str; ++ char *chk_ascii_str; ++ int sec, min, hour; ++ size_t chk_ascii_len; ++ int len_minutes; ++ int n, inc_len; ++ int diff; + + sec = time % 60; + time = time - sec; +@@ -954,60 +958,63 @@ time_to_string_text (long time) + secs = g_strdup_printf (ngettext ("%d second", + "%d seconds", sec), sec); + +- inc_len = strlen (g_strdup_printf (_("%s %s"), +- g_strdup_printf (ngettext ("%d hour", +- "%d hours", 1), 1), +- g_strdup_printf (ngettext ("%d minute", +- "%d minutes", 59), 59))) - 1; ++ /* inc_len = it's the lenght of the string "1 hour 59 minutes" */ ++ chk_hour_str = g_strdup_printf (ngettext ("%d hour", ++ "%d hours", 1), 1); ++ chk_minute_str = g_strdup_printf (ngettext ("%d minute", ++ "%d minutes", 59), 59); ++ chk_hour_minute_str = g_strdup_printf (_("%s %s"), ++ chk_hour_str, chk_minute_str); ++ inc_len = strlen (chk_hour_minute_str) - 1; ++ g_free (chk_hour_str); ++ g_free (chk_minute_str); ++ g_free (chk_hour_minute_str); + + len_minutes = 0; +- + for (n = 2; n < 60; n++) + { +- if (n < 10) +- { +- if ((strlen (g_str_to_ascii (g_strdup_printf (ngettext ("%d minute", +- "%d minutes", n), n), NULL)) - 2) > len_minutes) ++ char *minute_str = g_strdup_printf (ngettext ("%d minute", ++ "%d minutes", n), n); ++ char *ascii_str = g_str_to_ascii (minute_str, NULL); ++ size_t ascii_str_len = strlen (ascii_str); ++ size_t extra_length = (n < 10) ? 2 : 3; + +- len_minutes = strlen (g_str_to_ascii (g_strdup_printf (ngettext ("%d minute", +- "%d minutes", n), n), NULL)) - 2; +- } +- else +- { +- if ((strlen (g_str_to_ascii (g_strdup_printf (ngettext ("%d minute", +- "%d minutes", n), n), NULL)) - 3) > len_minutes) ++ diff = (int) (ascii_str_len - extra_length); ++ if (diff > len_minutes) ++ len_minutes = diff; + +- len_minutes = strlen (g_str_to_ascii (g_strdup_printf (ngettext ("%d minute", +- "%d minutes", n), n), NULL)) - 3; +- } ++ g_free (minute_str); ++ g_free (ascii_str); + } + +- if ((strlen (g_str_to_ascii (g_strdup_printf (ngettext ("%d minute", +- "%d minutes", 1), 1), NULL)) - 2) > len_minutes) ++ /* check the lenght of the string "1 minute" */ ++ chk_minute_str = g_strdup_printf (ngettext ("%d minute", ++ "%d minutes", 1), 1); ++ chk_ascii_str = g_str_to_ascii (chk_minute_str, NULL); ++ chk_ascii_len = strlen (chk_ascii_str); ++ diff = (int) (chk_ascii_len - 2); + +- len_minutes = strlen (g_str_to_ascii (g_strdup_printf (ngettext ("%d minute", +- "%d minutes", 1), 1), NULL)) - 2; ++ if (diff > len_minutes) ++ len_minutes = diff; + ++ g_free (chk_minute_str); ++ g_free (chk_ascii_str); ++ ++ /* len_minutes = MAX (1, len_minutes) */ + if (len_minutes < 1) + len_minutes = 1; + + if (hour > 0) + { + if (sec > 0) +- { + /* hour:minutes:seconds */ + string = g_strdup_printf (_("%s %s %s"), hours, mins, secs); +- } + else if (min > 0) +- { + /* hour:minutes */ + string = g_strdup_printf (_("%s %s"), hours, mins); +- } + else +- { + /* hour */ + string = g_strdup_printf (_("%s"), hours); +- } + } + else if (min > 0) + { +@@ -1019,36 +1026,28 @@ time_to_string_text (long time) + else + { + /* minutes */ ++ size_t max_len; ++ + string = g_strdup_printf (_("%s"), mins); + +- if (min < 10) +- { +- if (min == 1) +- while (strlen (string) != (len_minutes + inc_len + 3)) +- { +- if (strlen (string) % 2 == 0) +- string = g_strconcat (string, " ", NULL); +- else +- string = g_strconcat (" " , string, NULL); +- } +- else +- while (strlen (string) != (len_minutes + inc_len)) +- { +- if (strlen (string) % 2 == 0) +- string = g_strconcat (string, " ", NULL); +- else +- string = g_strconcat (" " , string, NULL); +- } +- } ++ if (min == 1) ++ max_len = (size_t) (len_minutes + inc_len + 3); ++ else if (min < 10) ++ max_len = (size_t) (len_minutes + inc_len); + else ++ max_len = (size_t) (len_minutes + inc_len - 1); ++ ++ while (strlen (string) != max_len) + { +- while (strlen (string) != (len_minutes + inc_len - 1)) +- { +- if (strlen (string) % 2 == 0) +- string = g_strconcat (string, " ", NULL); +- else +- string = g_strconcat (" " , string, NULL); +- } ++ char *string_aux; ++ ++ if (strlen (string) % 2 == 0) ++ string_aux = g_strconcat (string, " ", NULL); ++ else ++ string_aux = g_strconcat (" " , string, NULL); ++ ++ g_free (string); ++ string = string_aux; + } + } + } +@@ -1090,7 +1089,11 @@ enabled_checkbox_toggled (GtkToggleButton *button, gpointer user_data) + static void + picture_filename_changed (GtkFileChooserButton *button, gpointer user_data) + { +- g_settings_set_string (screensaver_settings, "picture-filename", gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (button))); ++ char *picture_filename; ++ ++ picture_filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (button)); ++ g_settings_set_string (screensaver_settings, "picture-filename", picture_filename); ++ g_free (picture_filename); + } + + static void +-- +2.39.2 + diff -Nru mate-screensaver-1.26.1/debian/patches/0002_mate-screensaver-preferences-fix-memory-leak.patch mate-screensaver-1.26.1/debian/patches/0002_mate-screensaver-preferences-fix-memory-leak.patch --- mate-screensaver-1.26.1/debian/patches/0002_mate-screensaver-preferences-fix-memory-leak.patch 1970-01-01 01:00:00.000000000 +0100 +++ mate-screensaver-1.26.1/debian/patches/0002_mate-screensaver-preferences-fix-memory-leak.patch 2023-12-27 15:30:26.000000000 +0100 @@ -0,0 +1,42 @@ +From ff4270809d096292a3b532046b6145d7a3b3dfb0 Mon Sep 17 00:00:00 2001 +From: rbuj <robert....@gmail.com> +Date: Sun, 30 Jan 2022 17:59:08 +0100 +Subject: [PATCH 2/2] mate-screensaver-preferences: fix memory leak + +Signed-off-by: Mike Gabriel <mike.gabr...@das-netzwerkteam.de> +--- + src/mate-screensaver-preferences.c | 9 +++++---- + 1 file changed, 5 insertions(+), 4 deletions(-) + +diff --git a/src/mate-screensaver-preferences.c b/src/mate-screensaver-preferences.c +index 46e780e..286218e 100644 +--- a/src/mate-screensaver-preferences.c ++++ b/src/mate-screensaver-preferences.c +@@ -663,19 +663,20 @@ separator_func (GtkTreeModel *model, + GtkTreeIter *iter, + gpointer data) + { +- int column = GPOINTER_TO_INT (data); +- char *text; ++ int column = GPOINTER_TO_INT (data); ++ gboolean res = FALSE; ++ char *text; + + gtk_tree_model_get (model, iter, column, &text, -1); + + if (text != NULL && strcmp (text, "__separator") == 0) + { +- return TRUE; ++ res = TRUE; + } + + g_free (text); + +- return FALSE; ++ return res; + } + + static void +-- +2.39.2 + diff -Nru mate-screensaver-1.26.1/debian/patches/series mate-screensaver-1.26.1/debian/patches/series --- mate-screensaver-1.26.1/debian/patches/series 2020-02-13 11:21:54.000000000 +0100 +++ mate-screensaver-1.26.1/debian/patches/series 2023-12-27 15:30:52.000000000 +0100 @@ -1,2 +1,4 @@ 1002_RDA-support-Make-MATE-s-screensaver-aware-of-being-r.patch 1003_RDA-Disable-switch-user-button-if-session-is-remote.patch +0001_mate-screensaver-preferences-fix-memory-leak.patch +0002_mate-screensaver-preferences-fix-memory-leak.patch