summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/gd/libgd/gd_gif_in.c6
-rw-r--r--ext/gd/tests/bug37360.gifbin0 -> 65646 bytes
-rw-r--r--ext/gd/tests/bug37360.phpt14
3 files changed, 17 insertions, 3 deletions
diff --git a/ext/gd/libgd/gd_gif_in.c b/ext/gd/libgd/gd_gif_in.c
index 59c698d871..3944aad66b 100644
--- a/ext/gd/libgd/gd_gif_in.c
+++ b/ext/gd/libgd/gd_gif_in.c
@@ -147,6 +147,9 @@ gdImageCreateFromGifCtx(gdIOCtxPtr fd)
Background = buf[5];
AspectRatio = buf[6];
+ imw = LM_to_uint(buf[0],buf[1]);
+ imh = LM_to_uint(buf[2],buf[3]);
+
if (BitSet(buf[4], LOCALCOLORMAP)) { /* Global Colormap */
if (ReadColorMap(fd, BitPixel, ColorMap)) {
return 0;
@@ -182,9 +185,6 @@ gdImageCreateFromGifCtx(gdIOCtxPtr fd)
bitPixel = 1<<((buf[8]&0x07)+1);
- imw = LM_to_uint(buf[4],buf[5]);
- imh = LM_to_uint(buf[6],buf[7]);
-
if (!useGlobalColormap) {
if (ReadColorMap(fd, bitPixel, localColorMap)) {
return 0;
diff --git a/ext/gd/tests/bug37360.gif b/ext/gd/tests/bug37360.gif
new file mode 100644
index 0000000000..3f9e6c5e40
--- /dev/null
+++ b/ext/gd/tests/bug37360.gif
Binary files differ
diff --git a/ext/gd/tests/bug37360.phpt b/ext/gd/tests/bug37360.phpt
new file mode 100644
index 0000000000..dce22e7c6f
--- /dev/null
+++ b/ext/gd/tests/bug37360.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Bug #37360 (gdimagecreatefromgif, bad image sizes)
+--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__) . '/bug37360.gif');
+var_dump($im);
+?>
+--EXPECTF--
+resource(%d) of type (gd)