]> granicus.if.org Git - php/commitdiff
MFH Fix segfault and potential security issue in imagerotate().
authorScott MacVicar <scottmac@php.net>
Wed, 10 Dec 2008 13:32:02 +0000 (13:32 +0000)
committerScott MacVicar <scottmac@php.net>
Wed, 10 Dec 2008 13:32:02 +0000 (13:32 +0000)
ext/gd/libgd/gd.c
ext/gd/tests/imagerotate_overflow.phpt [new file with mode: 0644]

index d00c697016003d3dcd83d5ed39c8e6e516ca402e..a2677c11dd7bd1137b8189831234a474c12cf4e8 100644 (file)
@@ -3136,7 +3136,7 @@ gdImagePtr gdImageRotate (gdImagePtr src, double dAngle, int clrBack, int ignore
                return NULL;
        }
 
-       if (!gdImageTrueColor(src) && clrBack>=gdImageColorsTotal(src)) {
+       if (!gdImageTrueColor(src) && (clrBack < 0 || clrBack>=gdImageColorsTotal(src))) {
                return NULL;
        }
 
diff --git a/ext/gd/tests/imagerotate_overflow.phpt b/ext/gd/tests/imagerotate_overflow.phpt
new file mode 100644 (file)
index 0000000..ade61d8
--- /dev/null
@@ -0,0 +1,32 @@
+--TEST--
+imagerotate() overflow with negative numbers
+--SKIPIF--
+<?php
+       if (!extension_loaded('gd')) {
+               die("skip gd extension not available.");
+       }
+
+       if (!function_exists('imagerotate')) {
+               die("skip imagerotate() not available.");
+       }
+?>
+--FILE--
+<?php
+
+$im = imagecreate(10, 10);
+
+$tmp = imagerotate ($im, 5, -9999999);
+
+var_dump($tmp);
+
+if ($tmp) {
+        imagedestroy($tmp);
+}
+
+if ($im) {
+        imagedestroy($im);
+}
+
+?>
+--EXPECT--
+bool(false)