]> granicus.if.org Git - php/commitdiff
- MF53: #45905, imagefilledrectangle() clipping error
authorPierre Joye <pajoye@php.net>
Tue, 7 Jul 2009 10:50:06 +0000 (10:50 +0000)
committerPierre Joye <pajoye@php.net>
Tue, 7 Jul 2009 10:50:06 +0000 (10:50 +0000)
ext/gd/libgd/gd.c

index 3eb6e37396207ccfcf228b1c9b04319bcad6f3f5..745f8635afa02ac99212004564c52c838b6afd88 100644 (file)
@@ -2111,21 +2111,10 @@ 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;
@@ -2138,6 +2127,22 @@ void gdImageFilledRectangle (gdImagePtr im, int x1, int y1, int x2, int y2, int
                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);