summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--ext/gd/libgd/gd.c20
-rw-r--r--ext/gd/tests/bug72913.phpt29
3 files changed, 31 insertions, 20 deletions
diff --git a/NEWS b/NEWS
index 9404084e49..7cd76808ad 100644
--- a/NEWS
+++ b/NEWS
@@ -18,6 +18,8 @@ PHP NEWS
. Fixed bug #72709 (imagesetstyle() causes OOB read for empty $styles). (cmb)
. Fixed bug #66005 (imagecopy does not support 1bit transparency on truecolor
images). (cmb)
+ . Fixed bug #72913 (imagecopy() loses single-color transparency on palette
+ images). (cmb)
- IMAP:
. Fixed bug #72852 (imap_mail null dereference). (Anatol)
diff --git a/ext/gd/libgd/gd.c b/ext/gd/libgd/gd.c
index 3ad51ada4b..928fdb89ca 100644
--- a/ext/gd/libgd/gd.c
+++ b/ext/gd/libgd/gd.c
@@ -2264,26 +2264,6 @@ void gdImageCopy (gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX,
return;
}
- /* Destination is palette based */
- if (src->trueColor) { /* But source is truecolor (Ouch!) */
- toy = dstY;
- for (y = srcY; (y < (srcY + h)); y++) {
- tox = dstX;
- for (x = srcX; x < (srcX + w); x++) {
- int nc;
- c = gdImageGetPixel (src, x, y);
-
- /* Get best match possible. */
- nc = gdImageColorResolveAlpha(dst, gdTrueColorGetRed(c), gdTrueColorGetGreen(c), gdTrueColorGetBlue(c), gdTrueColorGetAlpha(c));
-
- gdImageSetPixel(dst, tox, toy, nc);
- tox++;
- }
- toy++;
- }
- return;
- }
-
/* Palette based to palette based */
for (i = 0; i < gdMaxColors; i++) {
colorMap[i] = (-1);
diff --git a/ext/gd/tests/bug72913.phpt b/ext/gd/tests/bug72913.phpt
new file mode 100644
index 0000000000..0ad03a7d3c
--- /dev/null
+++ b/ext/gd/tests/bug72913.phpt
@@ -0,0 +1,29 @@
+--TEST--
+Bug #72913 (imagecopy() loses single-color transparency on palette images)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+?>
+--FILE--
+<?php
+$base64 = 'iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAABnRSTlMAAAAAAABu'
+ . 'pgeRAAAAVklEQVRYw+3UQQqAMBAEwf3/p9eTBxEPiWAmWMU8oGFJqgAAuOpzWTX3'
+ . 'xQUti+uRJTZ9V5aY1bOTFZLV7yZr9zt6ibv/qPXfrMpsGipbIy7oqQ8AYJED1plD'
+ . 'y5PCu2sAAAAASUVORK5CYII=';
+$src = imagecreatefromstring(base64_decode($base64));
+
+$dst = imagecreate(50, 50);
+$transparent = imagecolorallocatealpha($dst, 255, 255, 255, 127);
+imagealphablending($dst, false);
+imagesavealpha($dst, true);
+
+imagecopy($dst, $src, 0,0, 0,0, 50,50);
+
+ob_start();
+imagegd($dst);
+echo md5(ob_get_clean()), PHP_EOL;
+?>
+==DONE==
+--EXPECT--
+f03c27f20710e21debd7090c660f1a1e
+==DONE==