pajoye          Mon Jul 17 15:19:16 2006 UTC

  Added files:                 (Branch: PHP_4_4)
    /php-src/ext/gd/tests       bug38112.phpt bug38112.gif 

  Modified files:              
    /php-src    NEWS 
    /php-src/ext/gd/libgd       gd_gif_in.c 
  Log:
  - MFH #38112, bad code size segfault
  
  
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.1247.2.920.2.141&r2=1.1247.2.920.2.142&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.1247.2.920.2.141 php-src/NEWS:1.1247.2.920.2.142
--- php-src/NEWS:1.1247.2.920.2.141     Sun Jul 16 10:53:55 2006
+++ php-src/NEWS        Mon Jul 17 15:19:15 2006
@@ -6,6 +6,7 @@
 - Improved safe_mode check for the error_log() function. (Ilia)
 - Fixed handling of extremely long paths inside tempnam() function. (Ilia)
 - Fixed XSS inside phpinfo() with long inputs. (Ilia)
+- Fixed bug #38112 (corrupted gif segfaults) (Pierre)
 - Fixed bug #37720 (merge_php_config scrambles values). (Mike,
   pumuckel at metropolis dot de)
 - Fixed bug #37569 (WDDX incorrectly encodes high-ascii characters). (Ilia)
http://cvs.php.net/viewvc.cgi/php-src/ext/gd/libgd/gd_gif_in.c?r1=1.2.2.2.6.2&r2=1.2.2.2.6.3&diff_format=u
Index: php-src/ext/gd/libgd/gd_gif_in.c
diff -u php-src/ext/gd/libgd/gd_gif_in.c:1.2.2.2.6.2 
php-src/ext/gd/libgd/gd_gif_in.c:1.2.2.2.6.3
--- php-src/ext/gd/libgd/gd_gif_in.c:1.2.2.2.6.2        Mon May  8 14:04:39 2006
+++ php-src/ext/gd/libgd/gd_gif_in.c    Mon Jul 17 15:19:16 2006
@@ -216,6 +216,12 @@
        if (!im) {
                return 0;
        }
+
+               if (!im->colorsTotal) {
+                       gdImageDestroy(im);
+                       return 0;
+               }
+
        /* Check for open colors at the end, so
           we can reduce colorsTotal and ultimately
           BitsPerPixel */
@@ -506,6 +512,19 @@
        int             v;
        int             xpos = 0, ypos = 0, pass = 0;
        int i;
+
+          /*
+               **  Initialize the Compression routines
+               */
+          if (! ReadOK(fd,&c,1)) {
+                  return;
+          }
+
+          if (c > MAX_LWZ_BITS) {
+                  return;      
+          }
+
+
        /* Stash the color map into the image */
        for (i=0; (i<gdMaxColors); i++) {
                im->red[i] = cmap[CM_RED][i];   
@@ -515,12 +534,7 @@
        }
        /* Many (perhaps most) of these colors will remain marked open. */
        im->colorsTotal = gdMaxColors;
-       /*
-       **  Initialize the Compression routines
-       */
-       if (! ReadOK(fd,&c,1)) {
-               return; 
-       }
+
        if (LWZReadByte(fd, TRUE, c) < 0) {
                return;
        }

http://cvs.php.net/viewvc.cgi/php-src/ext/gd/tests/bug38112.phpt?view=markup&rev=1.1
Index: php-src/ext/gd/tests/bug38112.phpt
+++ php-src/ext/gd/tests/bug38112.phpt

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to