Author: bdubbs
Date: 2008-04-14 22:08:53 -0600 (Mon, 14 Apr 2008)
New Revision: 1941

Added:
   trunk/unzip/unzip-5.52-security_fix-2.patch
Log:
Add CVE-2008-0888 unzip security patch

Added: trunk/unzip/unzip-5.52-security_fix-2.patch
===================================================================
--- trunk/unzip/unzip-5.52-security_fix-2.patch                         (rev 0)
+++ trunk/unzip/unzip-5.52-security_fix-2.patch 2008-04-15 04:08:53 UTC (rev 
1941)
@@ -0,0 +1,47 @@
+Submitted By: Bruce Dubbs <[EMAIL PROTECTED]>
+Date: 2008-04-14
+Initial Package Version: 5.52
+Origin: https://bugzilla.altlinux.org/attachment.cgi?id=532
+Description: The inflate_dynamic() routine (~978, inflate.c) uses a macro
+NEEDBITS() that jumps execution to a cleanup routine on error, this
+routine attempts to free() two buffers allocated during the inflate
+process. At certain locations, the NEEDBITS() macro is used while the
+pointers are not pointing to valid buffers, they are either
+uninitialised or pointing inside a block that has already been free()d
+(ie, not pointing at the block, but at a location inside it).
+
+$LastChangedBy: $
+$Date:  $
+
+--- unzip-5.52/inflate.c
++++ unzip-5.52/inflate.c
+@@ -983,6 +983,7 @@
+   unsigned l;           /* last length */
+   unsigned m;           /* mask for bit lengths table */
+   unsigned n;           /* number of lengths to get */
++  struct huft *tlp;     
+   struct huft *tl;      /* literal/length code table */
+   struct huft *td;      /* distance code table */
+   unsigned bl;          /* lookup bits for tl */
+@@ -996,6 +997,8 @@
+   int retval = 0;       /* error code returned: initialized to "no error" */
+ 
+ 
++  td = tlp = tl = (struct huft *)NULL;
++
+   /* make local bit buffer */
+   Trace((stderr, "\ndynamic block"));
+   b = G.bb;
+@@ -1047,9 +1050,9 @@
+   while (i < n)
+   {
+     NEEDBITS(bl)
+-    j = (td = tl + ((unsigned)b & m))->b;
++    j = (tlp = tl + ((unsigned)b & m))->b;
+     DUMPBITS(j)
+-    j = td->v.n;
++    j = tlp->v.n;
+     if (j < 16)                 /* length of code in bits (0..15) */
+       ll[i++] = l = j;          /* save last length in l */
+     else if (j == 16)           /* repeat last length 3 to 6 times */
+

-- 
http://linuxfromscratch.org/mailman/listinfo/patches
FAQ: http://www.linuxfromscratch.org/faq/
Unsubscribe: See the above information page

Reply via email to