summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--ext/gd/libgd/gd_crop.c2
-rw-r--r--ext/gd/tests/bug77200.phpt37
3 files changed, 40 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 238c30c75a..819a42cab7 100644
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,8 @@ PHP NEWS
- GD:
. Fixed bug #77195 (Incorrect error handling of imagecreatefromjpeg()). (cmb)
. Fixed bug #77198 (auto cropping has insufficient precision). (cmb)
+ . Fixed bug #77200 (imagecropauto(…, GD_CROP_SIDES) crops left but not right).
+ (cmb)
- Sockets:
. Fixed bug #77136 (Unsupported IPV6_RECVPKTINFO constants on macOS).
diff --git a/ext/gd/libgd/gd_crop.c b/ext/gd/libgd/gd_crop.c
index 0b918c74c8..33c3723080 100644
--- a/ext/gd/libgd/gd_crop.c
+++ b/ext/gd/libgd/gd_crop.c
@@ -315,7 +315,7 @@ static int gdGuessBackgroundColorFromCorners(gdImagePtr im, int *color)
} else if (tl == tr || tl == bl || tl == br) {
*color = tl;
return 2;
- } else if (tr == bl) {
+ } else if (tr == bl || tr == br) {
*color = tr;
return 2;
} else if (br == bl) {
diff --git a/ext/gd/tests/bug77200.phpt b/ext/gd/tests/bug77200.phpt
new file mode 100644
index 0000000000..704b1796e7
--- /dev/null
+++ b/ext/gd/tests/bug77200.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Bug #77200 (imagecropauto(…, GD_CROP_SIDES) crops left but not right)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+if (!GD_BUNDLED) die('upstream bugfix has not been released');
+?>
+--FILE--
+<?php
+
+$orig = imagecreatetruecolor(8, 8);
+$red = imagecolorallocate($orig, 255, 0, 0);
+$green = imagecolorallocate($orig, 0, 255, 0);
+$blue = imagecolorallocate($orig, 0, 0, 255);
+
+imagefilledrectangle($orig, 0, 0, 3, 3, $green); // tl
+imagefilledrectangle($orig, 4, 0, 7, 3, $red); // tr
+imagefilledrectangle($orig, 0, 4, 3, 7, $green); // bl
+imagefilledrectangle($orig, 4, 4, 7, 7, $blue); // br
+
+$cropped = imagecropauto($orig, IMG_CROP_SIDES);
+var_dump(imagesx($cropped));
+
+imagefilledrectangle($orig, 0, 0, 3, 3, $red); // tl
+imagefilledrectangle($orig, 4, 0, 7, 3, $green); // tr
+imagefilledrectangle($orig, 0, 4, 3, 7, $blue); // bl
+imagefilledrectangle($orig, 4, 4, 7, 7, $green); // br
+
+$cropped = imagecropauto($orig, IMG_CROP_SIDES);
+var_dump(imagesx($cropped));
+
+?>
+===DONE===
+--EXPECT--
+int(4)
+int(4)
+===DONE===