diff options
author | Christoph M. Becker <cmb@php.net> | 2015-07-13 15:43:16 +0200 |
---|---|---|
committer | Christoph M. Becker <cmb@php.net> | 2015-07-13 15:48:48 +0200 |
commit | fa53d8463f2566f5e4cdedda7a2662f74a7dcd7c (patch) | |
tree | 8aad65c93462d0e848d874b388f9cc21b9e676a5 | |
parent | 2939bce9f3115f52612fc14fcadf797a659fd3ed (diff) | |
download | php-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.c | 5 | ||||
-rw-r--r-- | ext/gd/tests/bug69024.phpt | 15 |
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 |