summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorPierre Joye <pajoye@php.net>2006-05-07 17:21:11 +0000
committerPierre Joye <pajoye@php.net>2006-05-07 17:21:11 +0000
commitfc91929f9455e9af8c1c3d698d7bf688a70e5034 (patch)
treebe7184896c3bd661b3458a50c1baeaf018d74e36 /ext
parent787d1960c0cf1a6242bef742771a030ae8a0f224 (diff)
downloadphp-git-fc91929f9455e9af8c1c3d698d7bf688a70e5034.tar.gz
- MFB: #37346, invalid colormap format
Diffstat (limited to 'ext')
-rw-r--r--ext/gd/libgd/gd_gif_in.c21
-rw-r--r--ext/gd/tests/bug37346.gif4
-rw-r--r--ext/gd/tests/bug37346.phpt13
3 files changed, 30 insertions, 8 deletions
diff --git a/ext/gd/libgd/gd_gif_in.c b/ext/gd/libgd/gd_gif_in.c
index 1733a646f3..7261c9ff9e 100644
--- a/ext/gd/libgd/gd_gif_in.c
+++ b/ext/gd/libgd/gd_gif_in.c
@@ -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;
- }
- im->interlace = BitSet(buf[8], INTERLACE);
+
+ 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
index 0000000000..76ce1e398e
--- /dev/null
+++ b/ext/gd/tests/bug37346.gif
@@ -0,0 +1,4 @@
+GIF89a
+<
+
+看吧, 我都说过滤不严了 \ No newline at end of file
diff --git a/ext/gd/tests/bug37346.phpt b/ext/gd/tests/bug37346.phpt
new file mode 100644
index 0000000000..859518e1fd
--- /dev/null
+++ b/ext/gd/tests/bug37346.phpt
@@ -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