]> granicus.if.org Git - php/commitdiff
- #37346, invalid colormap format
authorPierre Joye <pajoye@php.net>
Sun, 7 May 2006 16:37:40 +0000 (16:37 +0000)
committerPierre Joye <pajoye@php.net>
Sun, 7 May 2006 16:37:40 +0000 (16:37 +0000)
ext/gd/libgd/gd_gif_in.c
ext/gd/tests/bug37346.gif [new file with mode: 0644]
ext/gd/tests/bug37346.phpt [new file with mode: 0644]

index 1733a646f36f91f12ba616fb0eeb2b346fc89b13..133753b04624fe46995b43efe0a16a9ea98cdf42 100644 (file)
@@ -44,7 +44,7 @@ static int set_verbose(void)
 #define LOCALCOLORMAP  0x80
 #define BitSet(byte, bit)      (((byte) & (bit)) == (bit))
 
-#define        ReadOK(file,buffer,len) (gdGetBuf(buffer, len, file) != 0)
+#define        ReadOK(file,buffer,len) (gdGetBuf(buffer, len, file) > 0)
 
 #define LM_to_uint(a,b)                        (((b)<<8)|(a))
 
@@ -184,14 +184,19 @@ gdImageCreateFromGifCtx(gdIOCtxPtr fd)
 
                imw = LM_to_uint(buf[4],buf[5]);
                imh = LM_to_uint(buf[6],buf[7]);
-              if (!(im = gdImageCreate(imw, imh))) {
-                        return 0;
-              }
+
+                          if (!useGlobalColormap) {
+                                  if (ReadColorMap(fd, bitPixel, localColorMap)) {
+                                          return 0;
+                                  }
+                          }
+
+                          if (!(im = gdImageCreate(imw, imh))) {
+                                  return 0;
+                          }
+
                im->interlace = BitSet(buf[8], INTERLACE);
                if (! useGlobalColormap) {
-                       if (ReadColorMap(fd, bitPixel, localColorMap)) {
-                                 return 0;
-                       }
                        ReadImage(im, fd, imw, imh, localColorMap,
                                  BitSet(buf[8], INTERLACE));
                                  /*1.4//imageCount != imageNumber); */
diff --git a/ext/gd/tests/bug37346.gif b/ext/gd/tests/bug37346.gif
new file mode 100644 (file)
index 0000000..76ce1e3
--- /dev/null
@@ -0,0 +1,4 @@
+GIF89a\r
+<\r
+\r
+¿´°É, ÎÒ¶¼Ëµ¹ýÂ˲»ÑÏÁË
\ No newline at end of file
diff --git a/ext/gd/tests/bug37346.phpt b/ext/gd/tests/bug37346.phpt
new file mode 100644 (file)
index 0000000..859518e
--- /dev/null
@@ -0,0 +1,13 @@
+--TEST--
+Bug #37346 (gdimagecreatefromgif, bad colormap)
+--SKIPIF--
+<?php 
+       if (!extension_loaded('gd')) die("skip gd extension not available\n"); 
+       if (!GD_BUNDLED) die('skip external GD libraries always fail');
+?>
+--FILE--
+<?php
+$im = imagecreatefromgif(dirname(__FILE__) . '/bug37346.gif');
+?>
+--EXPECTF--
+Warning: imagecreatefromgif(): '%sbug37346.gif' is not a valid GIF file in %sbug37346.php on line %d