diff options
author | Remi Collet <remi@php.net> | 2014-10-15 19:13:25 +0200 |
---|---|---|
committer | Remi Collet <remi@php.net> | 2014-10-15 19:13:25 +0200 |
commit | 2728e6f01798b1146b41587d38bf84cdf9988d17 (patch) | |
tree | 2dfd393c544ef6ee1a067ab1e1eeba219bda9bad | |
parent | 6d9c9f8f0468f8d90dc233d6fc70dc949349e6da (diff) | |
download | php-git-2728e6f01798b1146b41587d38bf84cdf9988d17.tar.gz |
Fixed Bug #65171 imagescale() fails
Third param (height) is set as optional,
but default value = -1 is incorrect
Compute correct height to preserve ratio.
-rw-r--r-- | ext/gd/gd.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/ext/gd/gd.c b/ext/gd/gd.c index cbc7219e37..f86dad58dc 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -5110,11 +5110,23 @@ PHP_FUNCTION(imagescale) return; } method = tmp_m; - new_width = tmp_w; - new_height = tmp_h; ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd); + if (tmp_h < 0) { + /* preserve ratio */ + long src_x, src_y; + + src_x = gdImageSX(im); + src_y = gdImageSY(im); + if (src_x) { + tmp_h = tmp_w * src_y / src_x; + } + } + + new_width = tmp_w; + new_height = tmp_h; + if (gdImageSetInterpolationMethod(im, method)) { im_scaled = gdImageScale(im, new_width, new_height); } |