summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmb@php.net>2015-07-13 15:43:16 +0200
committerChristoph M. Becker <cmb@php.net>2015-07-13 15:48:48 +0200
commitfa53d8463f2566f5e4cdedda7a2662f74a7dcd7c (patch)
tree8aad65c93462d0e848d874b388f9cc21b9e676a5
parent2939bce9f3115f52612fc14fcadf797a659fd3ed (diff)
downloadphp-git-fa53d8463f2566f5e4cdedda7a2662f74a7dcd7c.tar.gz
Fix #69024: imagescale segfault with palette based image
imagescale(..., IMG_BICUBIC) is not supposed to work with palette images, so we fix that by converting to true color if necessary. Basically the same fix has already been applied to the external libgd[1]. [1] <https://github.com/libgd/libgd/commit/723ea520bed3b5854df87393c687323d3930edf3>
-rw-r--r--ext/gd/libgd/gd_interpolation.c5
-rw-r--r--ext/gd/tests/bug69024.phpt15
2 files changed, 20 insertions, 0 deletions
diff --git a/ext/gd/libgd/gd_interpolation.c b/ext/gd/libgd/gd_interpolation.c
index c1bf061e0b..f9c8f88e70 100644
--- a/ext/gd/libgd/gd_interpolation.c
+++ b/ext/gd/libgd/gd_interpolation.c
@@ -1059,6 +1059,11 @@ gdImagePtr gdImageScaleTwoPass(const gdImagePtr src, const unsigned int src_widt
gdImagePtr tmp_im;
gdImagePtr dst;
+ /* Convert to truecolor if it isn't; this code requires it. */
+ if (!src->trueColor) {
+ gdImagePaletteToTrueColor(src);
+ }
+
tmp_im = gdImageCreateTrueColor(new_width, src_height);
if (tmp_im == NULL) {
return NULL;
diff --git a/ext/gd/tests/bug69024.phpt b/ext/gd/tests/bug69024.phpt
new file mode 100644
index 0000000000..f2113fc44f
--- /dev/null
+++ b/ext/gd/tests/bug69024.phpt
@@ -0,0 +1,15 @@
+--TEST--
+Bug #69024 (imagescale segfault with palette based image)
+--SKIPIF--
+<?php
+if (!extension_loaded('gd')) die('skip gd extension not available');
+?>
+--FILE--
+<?php
+$im = imagecreate(256, 256);
+imagescale($im, 32, 32, IMG_BICUBIC);
+imagedestroy($im);
+echo "done\n";
+?>
+--EXPECT--
+done