components/cups/patches/str3867.patch
author Mike Sullivan <Mike.Sullivan@Oracle.COM>
Wed, 29 Aug 2012 11:05:56 -0700
changeset 957 255465c5756f
parent 478 143405c872eb
permissions -rw-r--r--
Close of build 04.

See: http://cups.org/str.php?L3867 for details.

Index: filter/image-gif.c
===================================================================
--- filter/image-gif.c	(revision 9839)
+++ filter/image-gif.c	(working copy)
@@ -353,7 +353,7 @@
     * Read in another buffer...
     */
 
-    if ((count = gif_get_block (fp, buf + last_byte)) <= 0)
+    if ((count = gif_get_block(fp, buf + last_byte)) <= 0)
     {
      /*
       * Whoops, no more data!
@@ -582,20 +582,14 @@
     gif_get_code(fp, 0, 1);
 
    /*
-    * Wipe the decompressor table...
+    * Wipe the decompressor table (already mostly 0 due to the calloc above...)
     */
 
     fresh = 1;
 
-    for (i = 0; i < clear_code; i ++)
-    {
-      table[0][i] = 0;
+    for (i = 1; i < clear_code; i ++)
       table[1][i] = i;
-    }
 
-    for (; i < 4096; i ++)
-      table[0][i] = table[1][0] = 0;
-
     sp = stack;
 
     return (0);
@@ -605,30 +599,31 @@
     fresh = 0;
 
     do
+    {
       firstcode = oldcode = gif_get_code(fp, code_size, 0);
+    }
     while (firstcode == clear_code);
 
-    return (firstcode);
+    return (firstcode & 255);
   }
   else if (!table)
     return (0);
 
   if (sp > stack)
-    return (*--sp);
+    return ((*--sp) & 255);
 
-  while ((code = gif_get_code (fp, code_size, 0)) >= 0)
+  while ((code = gif_get_code(fp, code_size, 0)) >= 0)
   {
     if (code == clear_code)
     {
-      for (i = 0; i < clear_code; i ++)
-      {
-	table[0][i] = 0;
+     /*
+      * Clear/reset the compression table...
+      */
+
+      memset(table, 0, 2 * sizeof(gif_table_t));
+      for (i = 1; i < clear_code; i ++)
 	table[1][i] = i;
-      }
 
-      for (; i < 4096; i ++)
-	table[0][i] = table[1][i] = 0;
-
       code_size     = set_code_size + 1;
       max_code_size = 2 * clear_code;
       max_code      = clear_code + 2;
@@ -637,13 +632,12 @@
 
       firstcode = oldcode = gif_get_code(fp, code_size, 0);
 
-      return (firstcode);
+      return (firstcode & 255);
     }
-    else if (code == end_code)
+    else if (code == end_code || code > max_code)
     {
-      unsigned char	buf[260];
+      unsigned char	buf[260];	/* Block buffer */
 
-
       if (!gif_eof)
         while (gif_get_block(fp, buf) > 0);
 
@@ -652,7 +646,7 @@
 
     incode = code;
 
-    if (code >= max_code)
+    if (code == max_code)
     {
       *sp++ = firstcode;
       code  = oldcode;
@@ -686,10 +680,10 @@
     oldcode = incode;
 
     if (sp > stack)
-      return (*--sp);
+      return ((*--sp) & 255);
   }
 
-  return (code);
+  return (code & 255);
 }