Package: release.debian.org
User: release.debian....@packages.debian.org
Usertags: unblock
Severity: normal

I'd like to ask the unblocking of gettext 0.19.3-2.

This release fixes three memory related bugs, in every case the fix
comes directly from upstream git.

debdiff follows.

Thanks.

diff -Nru gettext-0.19.3/debian/changelog gettext-0.19.3/debian/changelog
--- gettext-0.19.3/debian/changelog     2014-10-23 15:35:20.000000000 +0200
+++ gettext-0.19.3/debian/changelog     2014-11-30 12:10:51.000000000 +0100
@@ -1,3 +1,16 @@
+gettext (0.19.3-2) unstable; urgency=low
+
+  * xgettext: Fix double-free in singular/plural argument extraction.
+    See http://lists.gnu.org/archive/html/bug-gettext/2014-10/msg00028.html
+    Patch extracted from upstream commits 8137d2b and 84044b5.
+  * msgunfmt: Fix segfault on certain (slightly corrupted) .mo files.
+    Patch extracted from upstream commit abf93d1. Closes: #769901.
+  * msgfilter: Fix read buffer allocation for empty input.
+    See http://lists.gnu.org/archive/html/bug-gettext/2014-11/msg00008.html
+    Patch extracted from upstream commit 06e206f.
+
+ -- Santiago Vila <sanv...@debian.org>  Sun, 30 Nov 2014 12:10:20 +0100
+
 gettext (0.19.3-1) unstable; urgency=low
 
   * New upstream release.
diff -Nru gettext-0.19.3/debian/patches/04-xgettext-fix-double-free 
gettext-0.19.3/debian/patches/04-xgettext-fix-double-free
--- gettext-0.19.3/debian/patches/04-xgettext-fix-double-free   1970-01-01 
01:00:00.000000000 +0100
+++ gettext-0.19.3/debian/patches/04-xgettext-fix-double-free   2014-11-30 
12:04:00.000000000 +0100
@@ -0,0 +1,94 @@
+From: Daiki Ueno <u...@gnu.org>
+Subject: Fix double-free in singular/plural argument extraction
+X-Debian-version: 0.19.3-2
+
+--- a/gettext-tools/src/xgettext.c
++++ b/gettext-tools/src/xgettext.c
+@@ -3099,9 +3099,9 @@
+                 char *msgid = parser->parse (best_cp->msgid,
+                                              &best_cp->msgid_pos,
+                                              best_cp->msgid_escape);
+-                free (best_cp->msgid);
+                 if (best_cp->msgid_plural == best_cp->msgid)
+                   best_cp->msgid_plural = msgid;
++                free (best_cp->msgid);
+                 best_cp->msgid = msgid;
+               }
+             else
+@@ -3110,26 +3110,7 @@
+                 CONVERT_STRING (best_cp->msgid, lc_string);
+               }
+ 
+-            if (best_cp->msgid_comment != NULL)
+-              {
+-                refcounted_string_list_ty *msgid_comment =
+-                  savable_comment_convert_encoding (best_cp->msgid_comment,
+-                                                    &best_cp->msgid_pos);
+-                drop_reference (best_cp->msgid_comment);
+-                best_cp->msgid_comment = msgid_comment;
+-              }
+-
+-            /* best_cp->msgctxt and best_cp->msgid are already in
+-               UTF-8.  Prevent further conversion in remember_a_message.  */
+-            encoding = xgettext_current_source_encoding;
+-            xgettext_current_source_encoding = po_charset_utf8;
+-            mp = remember_a_message (ap->mlp, best_cp->msgctxt, 
best_cp->msgid,
+-                                     msgid_context,
+-                                     &best_cp->msgid_pos,
+-                                     NULL, best_cp->msgid_comment);
+-            xgettext_current_source_encoding = encoding;
+-
+-            if (mp != NULL && best_cp->msgid_plural != NULL)
++            if (best_cp->msgid_plural)
+               {
+                 /* best_cp->msgid_plural may point to best_cp->msgid.
+                    In that case, it is already interpreted and converted.  */
+@@ -3152,14 +3133,41 @@
+                       }
+                   }
+ 
+-                encoding = xgettext_current_source_encoding;
+-                xgettext_current_source_encoding = po_charset_utf8;
+-                remember_a_message_plural (mp, best_cp->msgid_plural,
+-                                           msgid_plural_context,
+-                                           &best_cp->msgid_plural_pos,
+-                                           NULL);
+-                xgettext_current_source_encoding = encoding;
++                /* If best_cp->msgid_plural equals to best_cp->msgid,
++                   the ownership will be transferred to
++                   remember_a_message before it is passed to
++                   remember_a_message_plural.
++
++                   Make a copy of the string in that case.  */
++                if (best_cp->msgid_plural == best_cp->msgid)
++                  best_cp->msgid_plural = xstrdup (best_cp->msgid);
++              }
++
++            if (best_cp->msgid_comment != NULL)
++              {
++                refcounted_string_list_ty *msgid_comment =
++                  savable_comment_convert_encoding (best_cp->msgid_comment,
++                                                    &best_cp->msgid_pos);
++                drop_reference (best_cp->msgid_comment);
++                best_cp->msgid_comment = msgid_comment;
+               }
++
++            /* best_cp->msgctxt, best_cp->msgid, and best_cp->msgid_plural
++               are already in UTF-8.  Prevent further conversion in
++               remember_a_message.  */
++            encoding = xgettext_current_source_encoding;
++            xgettext_current_source_encoding = po_charset_utf8;
++            mp = remember_a_message (ap->mlp, best_cp->msgctxt, 
best_cp->msgid,
++                                     msgid_context,
++                                     &best_cp->msgid_pos,
++                                     NULL, best_cp->msgid_comment);
++            if (mp != NULL && best_cp->msgid_plural != NULL)
++              remember_a_message_plural (mp,
++                                         best_cp->msgid_plural,
++                                         msgid_plural_context,
++                                         &best_cp->msgid_plural_pos,
++                                         NULL);
++            xgettext_current_source_encoding = encoding;
+           }
+ 
+           if (best_cp->xcomments.nitems > 0)
diff -Nru gettext-0.19.3/debian/patches/05-msgunfmt-fix-segfault 
gettext-0.19.3/debian/patches/05-msgunfmt-fix-segfault
--- gettext-0.19.3/debian/patches/05-msgunfmt-fix-segfault      1970-01-01 
01:00:00.000000000 +0100
+++ gettext-0.19.3/debian/patches/05-msgunfmt-fix-segfault      2014-11-30 
12:05:00.000000000 +0100
@@ -0,0 +1,26 @@
+From: Daiki Ueno <u...@gnu.org>
+Subject: Fix segfault on certain (slightly corrupted) .mo files
+Bug-Debian: http://bugs.debian.org/769901
+X-Debian-version: 0.19.3-2
+
+--- a/gettext-tools/src/read-mo.c
++++ b/gettext-tools/src/read-mo.c
+@@ -38,6 +38,7 @@
+ #include "message.h"
+ #include "format.h"
+ #include "gettext.h"
++#include "xsize.h"
+ 
+ #define _(str) gettext (str)
+ 
+@@ -121,8 +122,9 @@
+   /* See 'struct string_desc'.  */
+   nls_uint32 s_length = get_uint32 (bfp, offset);
+   nls_uint32 s_offset = get_uint32 (bfp, offset + 4);
++  size_t s_end = xsum3 (s_offset, s_length, 1);
+ 
+-  if (s_offset + s_length + 1 > bfp->size)
++  if (size_overflow_p (s_end) || s_end > bfp->size)
+     error (EXIT_FAILURE, 0, _("file \"%s\" is truncated"), bfp->filename);
+   if (bfp->data[s_offset + s_length] != '\0')
+     error (EXIT_FAILURE, 0,
diff -Nru gettext-0.19.3/debian/patches/06-msgfilter-fix-read-buffer-allocation 
gettext-0.19.3/debian/patches/06-msgfilter-fix-read-buffer-allocation
--- gettext-0.19.3/debian/patches/06-msgfilter-fix-read-buffer-allocation       
1970-01-01 01:00:00.000000000 +0100
+++ gettext-0.19.3/debian/patches/06-msgfilter-fix-read-buffer-allocation       
2014-11-30 12:06:00.000000000 +0100
@@ -0,0 +1,15 @@
+From: Daiki Ueno <u...@gnu.org>
+Subject: Fix read buffer allocation for empty input
+X-Debian-version: 0.19.3-2
+
+--- a/gettext-tools/src/msgfilter.c
++++ b/gettext-tools/src/msgfilter.c
+@@ -554,7 +554,7 @@
+ 
+   if (l->length == l->allocated)
+     {
+-      l->allocated = l->allocated + (l->allocated >> 1);
++      l->allocated = l->allocated + (l->allocated >> 1) + 1;
+       l->result = (char *) xrealloc (l->result, l->allocated);
+     }
+   *num_bytes_p = l->allocated - l->length;
diff -Nru gettext-0.19.3/debian/patches/series 
gettext-0.19.3/debian/patches/series
--- gettext-0.19.3/debian/patches/series        2014-10-16 21:18:57.000000000 
+0200
+++ gettext-0.19.3/debian/patches/series        2014-11-30 12:10:00.000000000 
+0100
@@ -1,4 +1,7 @@
 01-do-not-use-java-in-urlget
 02-msgfmt-default-little-endian
 03-libtool-powerpc-le
+04-xgettext-fix-double-free
+05-msgunfmt-fix-segfault
+06-msgfilter-fix-read-buffer-allocation
 99-config-guess-config-sub


-- 
To UNSUBSCRIBE, email to debian-release-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: 
https://lists.debian.org/alpine.deb.2.11.1412030942180.16...@cantor.unex.es

Reply via email to