]> granicus.if.org Git - php/commitdiff
Fixed Bug #66893i imagescale ignore method argument
authorRemi Collet <remi@php.net>
Wed, 12 Mar 2014 14:33:41 +0000 (15:33 +0100)
committerRemi Collet <remi@php.net>
Wed, 12 Mar 2014 14:35:42 +0000 (15:35 +0100)
We also have our goto fail; bug.

Upstream fix for libgd
https://bitbucket.org/libgd/gd-libgd/commits/5b42b1178c37ffd30c9a15733058656be0277da0

ext/gd/gd.c
ext/gd/libgd/gd_interpolation.c

index 1b8366d58c3597ca6bb44d9b19bd1a4da0ca5154..90a053535aaa40c57e5b00def2b37248ad8bba2d 100644 (file)
@@ -5101,7 +5101,7 @@ PHP_FUNCTION(imagescale)
 {
        zval *IM;
        gdImagePtr im;
-       gdImagePtr im_scaled;
+       gdImagePtr im_scaled = NULL;
        int new_width, new_height;
        long tmp_w, tmp_h=-1, tmp_m = GD_BILINEAR_FIXED;
        gdInterpolationMethod method;
@@ -5114,31 +5114,11 @@ PHP_FUNCTION(imagescale)
        new_height = tmp_h;
 
        ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
-       im_scaled = gdImageScale(im, new_width, new_height);
-       goto finish;
-       switch (method) {
-               case GD_NEAREST_NEIGHBOUR:
-                       im_scaled = gdImageScaleNearestNeighbour(im, new_width, new_height);
-                       break;
-
-               case GD_BILINEAR_FIXED:
-                       im_scaled = gdImageScaleBilinear(im, new_width, new_height);
-                       break;
-
-               case GD_BICUBIC:
-                       im_scaled = gdImageScaleBicubicFixed(im, new_width, new_height);
-                       break;
-
-               case GD_BICUBIC_FIXED:
-                       im_scaled = gdImageScaleBicubicFixed(im, new_width, new_height);
-                       break;
-
-               default:
-                       im_scaled = gdImageScaleTwoPass(im, im->sx, im->sy, new_width, new_height);
-                       break;
 
+       if (gdImageSetInterpolationMethod(im, method)) {
+               im_scaled = gdImageScale(im, new_width, new_height);
        }
-finish:
+
        if (im_scaled == NULL) {
                RETURN_FALSE;
        } else {
index 3643535f2eed3364c385505aa513b90cf44fda7a..76327be7df4559e5ab6d1a276a3d400dcab34ca1 100644 (file)
@@ -2472,10 +2472,7 @@ int gdImageSetInterpolationMethod(gdImagePtr im, gdInterpolationMethod id)
 
        switch (id) {
                case GD_DEFAULT:
-                       im->interpolation_id = GD_BILINEAR_FIXED;
-                       im->interpolation = NULL;
-                       break;
-
+                       id = GD_BILINEAR_FIXED;
                /* Optimized versions */
                case GD_BILINEAR_FIXED:
                case GD_BICUBIC_FIXED: