From 307bd5a23b9c1c55e550d318e3e879aa42c134cd Mon Sep 17 00:00:00 2001 From: Pierre Joye Date: Tue, 7 Jul 2009 11:06:21 +0000 Subject: [PATCH] - MF53: #45905, imagefilledrectangle() clipping error --- ext/gd/libgd/gd.c | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c index 56ab3fd6a8..874dd1d1f4 100644 --- a/ext/gd/libgd/gd.c +++ b/ext/gd/libgd/gd.c @@ -2205,33 +2205,39 @@ void gdImageFilledRectangle (gdImagePtr im, int x1, int y1, int x2, int y2, int { int x, y; - /* Nick Atty: limit the points at the edge. Note that this also - * nicely kills any plotting for rectangles completely outside the - * window as it makes the tests in the for loops fail - */ - if (x1 < 0) { - x1 = 0; - } - if (x1 > gdImageSX(im)) { - x1 = gdImageSX(im); - } - if(y1 < 0) { - y1 = 0; - } - if (y1 > gdImageSY(im)) { - y1 = gdImageSY(im); + if (x1 == x2 && y1 == y2) { + gdImageSetPixel(im, x1, y1, color); + return; } + if (x1 > x2) { x = x1; x1 = x2; x2 = x; } + if (y1 > y2) { y = y1; y1 = y2; y2 = y; } + if (x1 < 0) { + x1 = 0; + } + + if (x2 >= gdImageSX(im)) { + x2 = gdImageSX(im) - 1; + } + + if (y1 < 0) { + y1 = 0; + } + + if (y2 >= gdImageSY(im)) { + y2 = gdImageSY(im) - 1; + } + for (y = y1; (y <= y2); y++) { for (x = x1; (x <= x2); x++) { gdImageSetPixel (im, x, y, color); -- 2.50.1