From 1857c0d17f79219ce3831a54eeebd284e3055f06 Mon Sep 17 00:00:00 2001 From: Pierre Joye Date: Sat, 3 Jul 2004 15:32:33 +0000 Subject: [PATCH] - Fix #28984, using full transparent segfauls in imagefill (NB: imagefill is broken in HEAD, same code) - Add testcase --- ext/gd/libgd/gd.c | 6 ++++++ ext/gd/tests/bug28984.phpt | 25 +++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 ext/gd/tests/bug28984.phpt diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c index 3eb846cee1..4ee4a442fc 100644 --- a/ext/gd/libgd/gd.c +++ b/ext/gd/libgd/gd.c @@ -1879,13 +1879,18 @@ void gdImageFill(gdImagePtr im, int x, int y, int nc) 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; } @@ -1931,6 +1936,7 @@ skip: for (x++; x<=x2 && (gdImageGetPixel(im, x, y)!=oc); x++); } while (x<=x2); } efree(stack); + im->alphaBlendingFlag = alphablending_bak; } void _gdImageFillTiled(gdImagePtr im, int x, int y, int nc) diff --git a/ext/gd/tests/bug28984.phpt b/ext/gd/tests/bug28984.phpt new file mode 100644 index 0000000000..24b501a9df --- /dev/null +++ b/ext/gd/tests/bug28984.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #28984 (imagefill segfault using a transparent color). +--SKIPIF-- + +--FILE-- + +--EXPECT-- +Done -- 2.50.1