int l, x1, x2, dy;
int oc; /* old pixel value */
int wx2,wy2;
+ int alphablending_bak;
/* stack of filled segments */
/* struct seg stack[FILL_MAX],*sp = stack;; */
struct seg *stack;
struct seg *sp;
+ alphablending_bak = im->alphaBlendingFlag;
+ im->alphaBlendingFlag = 0;
+
if (nc==gdTiled){
_gdImageFillTiled(im,x,y,nc);
+ im->alphaBlendingFlag = alphablending_bak;
return;
}
} while (x<=x2);
}
efree(stack);
+ im->alphaBlendingFlag = alphablending_bak;
}
void _gdImageFillTiled(gdImagePtr im, int x, int y, int nc)
--- /dev/null
+--TEST--
+Bug #28984 (imagefill segfault using a transparent color).
+--SKIPIF--
+<?php
+ if (!extension_loaded('gd')) {
+ die("skip gd extension not available\n");
+ }
+ if (!GD_BUNDLED) {
+ die('skip external GD libraries may fail');
+ }
+?>
+--FILE--
+<?php
+$im = imagecreatetruecolor(100,100);
+imagealphablending($im, false);
+#$alpha = imagecolorallocatealpha($im, 255, 0, 255,0);
+$alpha = imagecolorallocate($im, 255, 0, 0);
+imagefill($im, 2, 2, $alpha);
+#imagesavealpha($im, true);
+imagepng($im, '1.png');
+imagedestroy($im);
+echo "Done\n";
+?>
+--EXPECT--
+Done