Sophie

Sophie

distrib > Mandriva > 2009.1 > x86_64 > by-pkgid > cdee67f930cfa599c7b067d99a146df5 > files > 3

unzip-5.52-8mdv2009.1.src.rpm

--- inflate.c	2005-02-27 07:08:46.000000000 +0100
+++ inflate.c.oden	2008-03-18 19:33:44.000000000 +0100
@@ -983,6 +983,7 @@ static int inflate_dynamic(__G)
   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 @@ static int inflate_dynamic(__G)
   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 @@ static int inflate_dynamic(__G)
   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 */
@@ -1141,6 +1144,7 @@ static int inflate_dynamic(__G)
       huft_free(td);
     }
     huft_free(tl);
+
     return retval;
   }
 
@@ -1149,8 +1153,8 @@ static int inflate_dynamic(__G)
 
 cleanup_and_exit:
   /* free the decoding tables, return */
-  huft_free(tl);
-  huft_free(td);
+  if (tl) huft_free(tl);
+  if (td) huft_free(td);
   return retval;
 }