]> granicus.if.org Git - php/commitdiff
Properly check imagegd() signature
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 9 Feb 2021 14:18:59 +0000 (15:18 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 9 Feb 2021 14:18:59 +0000 (15:18 +0100)
Unlike imagegd2(), this function only accepts two parameters,
so we should be checking for that.

ext/gd/gd.c

index c1329d13cfd4909b7712bc5e41aeac87f8e9f68a..d009b9b09ab4b5cf71b2755d5841ead315a4a626 100644 (file)
@@ -1785,8 +1785,18 @@ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char
 
        /* The quality parameter for gd2 stands for chunk size */
 
-       if (zend_parse_parameters(argc, "O|p!ll", &imgind, gd_image_ce, &file, &file_len, &quality, &type) == FAILURE) {
-               RETURN_THROWS();
+       switch (image_type) {
+               case PHP_GDIMG_TYPE_GD:
+                       if (zend_parse_parameters(argc, "O|p!", &imgind, gd_image_ce, &file, &file_len) == FAILURE) {
+                               RETURN_THROWS();
+                       }
+                       break;
+               case PHP_GDIMG_TYPE_GD2:
+                       if (zend_parse_parameters(argc, "O|p!ll", &imgind, gd_image_ce, &file, &file_len, &quality, &type) == FAILURE) {
+                               RETURN_THROWS();
+                       }
+                       break;
+               EMPTY_SWITCH_DEFAULT_CASE()
        }
 
        im = php_gd_libgdimageptr_from_zval_p(imgind);