]> granicus.if.org Git - php/commitdiff
Fix #77943: imageantialias($image, false); does not work
authorChristoph M. Becker <cmbecker69@gmx.de>
Mon, 29 Apr 2019 14:14:26 +0000 (16:14 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Mon, 29 Apr 2019 14:16:46 +0000 (16:16 +0200)
Firstly, we must not call `gdImageSetAntiAliased()` (which sets the
color to anti-alias), but rather modify the `gdImage.AA` flag.
Furthermore, we have to actually use the supplied boolean value.

We also make sure that we don't attempt to enable anti-aliasing for
palette images.

NEWS
ext/gd/gd.c
ext/gd/tests/bug77943.phpt [new file with mode: 0644]
ext/gd/tests/bug77943.png [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index a91cf9360a26ef26de4981b3638999132a384034..260b5d67fdac6c5006cf9b0446e8c04bd7efc90b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,9 @@ PHP                                                                        NEWS
 - FPM:
   . Fixed bug #77921 (static.php.net doesn't work anymore). (Peter Kokot)
 
+- GD:
+  . Fixed bug #77943 (imageantialias($image, false); does not work). (cmb)
+
 - JSON:
   . Fixed bug #77843 (Use after free with json serializer). (Nikita)
 
index 50d47453710fe9a117dcfd80082de393220d097b..231fcac3811c0bd1d8acb54e40a3b57eab799885 100644 (file)
@@ -4699,7 +4699,11 @@ PHP_FUNCTION(imageantialias)
        if ((im = (gdImagePtr)zend_fetch_resource(Z_RES_P(IM), "Image", le_gd)) == NULL) {
                RETURN_FALSE;
        }
-       gdImageSetAntiAliased(im, 0);
+
+       if (im->trueColor) {
+               im->AA = alias;
+       }
+
        RETURN_TRUE;
 }
 /* }}} */
diff --git a/ext/gd/tests/bug77943.phpt b/ext/gd/tests/bug77943.phpt
new file mode 100644 (file)
index 0000000..1009b3e
--- /dev/null
@@ -0,0 +1,29 @@
+--TEST--
+Bug #77943 (imageantialias($image, false); does not work)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+?>
+--FILE--
+<?php
+require_once __DIR__ . '/func.inc';
+
+$width = 400;
+$height = 300;
+$im = imagecreatetruecolor($width, $height);
+$white = imagecolorallocate($im, 255, 255, 255);
+$blue = imagecolorallocate($im, 0, 0, 255);
+
+imageantialias($im, false);
+imagefilledrectangle($im, 0, 0, $width-1, $height-1, $white);
+
+imageline($im, 0, 0, $width, $height, $blue);
+imagesetthickness($im, 3);
+imageline($im, 10, 0, $width, $height-10, $blue);
+
+test_image_equals_file(__DIR__ . '/bug77943.png', $im);
+?>
+===DONE===
+--EXPECT--
+The images are equal.
+===DONE===
diff --git a/ext/gd/tests/bug77943.png b/ext/gd/tests/bug77943.png
new file mode 100644 (file)
index 0000000..6eae56c
Binary files /dev/null and b/ext/gd/tests/bug77943.png differ