diff options
author | Pierre Joye <pajoye@php.net> | 2006-05-07 17:21:11 +0000 |
---|---|---|
committer | Pierre Joye <pajoye@php.net> | 2006-05-07 17:21:11 +0000 |
commit | fc91929f9455e9af8c1c3d698d7bf688a70e5034 (patch) | |
tree | be7184896c3bd661b3458a50c1baeaf018d74e36 /ext | |
parent | 787d1960c0cf1a6242bef742771a030ae8a0f224 (diff) | |
download | php-git-fc91929f9455e9af8c1c3d698d7bf688a70e5034.tar.gz |
- MFB: #37346, invalid colormap format
Diffstat (limited to 'ext')
-rw-r--r-- | ext/gd/libgd/gd_gif_in.c | 21 | ||||
-rw-r--r-- | ext/gd/tests/bug37346.gif | 4 | ||||
-rw-r--r-- | ext/gd/tests/bug37346.phpt | 13 |
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 |