Fixed #60160 and added a test for it
authorFlorian Anderiasch <fa@php.net>
Tue, 1 Nov 2011 11:51:53 +0000 (11:51 +0000)
committerFlorian Anderiasch <fa@php.net>
Tue, 1 Nov 2011 11:51:53 +0000 (11:51 +0000)
ext/gd/libgd/gd.c
ext/gd/tests/bug60160.phpt [new file with mode: 0644]

index 0cc2e1d7de9f4e3914d85734e981da0fb2748f23..fa75898ddb33678569ff4de3195974fc7c74443e 100644 (file)
@@ -1894,19 +1894,14 @@ void gdImageFill(gdImagePtr im, int x, int y, int nc)
        if (im->sx < 4) {
                int ix = x, iy = y, c;
                do {
-                       c = gdImageGetPixel(im, ix, iy);
-                       if (c != oc) {
-                               goto done;
-                       }
-                       gdImageSetPixel(im, ix, iy, nc);
-               } while(ix++ < (im->sx -1));
-               ix = x; iy = y + 1;
-               do {
-                       c = gdImageGetPixel(im, ix, iy);
-                       if (c != oc) {
-                               goto done;
-                       }
-                       gdImageSetPixel(im, ix, iy, nc);
+                       do {
+                               c = gdImageGetPixel(im, ix, iy);
+                               if (c != oc) {
+                                       goto done;
+                               }
+                               gdImageSetPixel(im, ix, iy, nc);
+                       } while(ix++ < (im->sx -1));
+                       ix = x;
                } while(iy++ < (im->sy -1));
                goto done;
        }
diff --git a/ext/gd/tests/bug60160.phpt b/ext/gd/tests/bug60160.phpt
new file mode 100644 (file)
index 0000000..af2df41
--- /dev/null
@@ -0,0 +1,26 @@
+--TEST--
+Bug #60160 (imagefill does not work correctly for small images) @see bug51671
+--SKIPIF--
+<?php
+       if(!extension_loaded('gd')){ die('skip gd extension not available'); }
+?>
+--FILE--
+<?php
+$w = 3;
+$h = 50;
+$im = imagecreatetruecolor($w, $h);
+$white = imagecolorallocate($im, 255, 255, 255);
+imagefill($im, 0, 0, $white);
+
+for ($ix = 0; $ix < $w; $ix++) {
+        for ($iy = 0; $iy < $h; $iy++) {
+                if (($c = imagecolorat($im, $ix, $iy)) != $white) {
+                        printf("Failed, ($ix, $iy) is %X\n", $c);
+                }
+        }
+}
+
+echo "OK\n";
+?>
+--EXPECTF--
+OK