summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRemi Collet <remi@php.net>2014-10-15 19:13:25 +0200
committerRemi Collet <remi@php.net>2014-10-15 19:13:25 +0200
commit2728e6f01798b1146b41587d38bf84cdf9988d17 (patch)
tree2dfd393c544ef6ee1a067ab1e1eeba219bda9bad
parent6d9c9f8f0468f8d90dc233d6fc70dc949349e6da (diff)
downloadphp-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.c16
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);
}