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

Reply via email to