Fixed #60160 and added a test for it

This commit is contained in:
Florian Anderiasch 2011-11-01 11:51:53 +00:00
parent b5f15ef561
commit 58a134fb48
2 changed files with 34 additions and 13 deletions

View 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;
}

View File

@ -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