diff --git a/ext/gd/libgd/gd_filter.c b/ext/gd/libgd/gd_filter.c index d567898548d2..97dea5c552cd 100644 --- a/ext/gd/libgd/gd_filter.c +++ b/ext/gd/libgd/gd_filter.c @@ -7,6 +7,7 @@ #else # include #endif +#include #include #include @@ -20,6 +21,20 @@ /* Begin filters function */ #define GET_PIXEL_FUNCTION(src)(src->trueColor?gdImageGetTrueColorPixel:gdImageGetPixel) +static int gdClampFloatToByte(float value) +{ + if (!isfinite(value)) { + return value > 0.0f ? 255 : 0; + } + if (value > 255.0f) { + return 255; + } + if (value < 0.0f) { + return 0; + } + return (int)value; +} + #ifdef _WIN32 # define GD_SCATTER_SEED() (unsigned int)(time(0) * GetCurrentProcessId()) #else @@ -417,6 +432,7 @@ int gdImageConvolution(gdImagePtr src, float filter[3][3], float filter_div, flo for ( y=0; ysy; y++) { for(x=0; xsx; x++) { + int new_ri, new_gi, new_bi; new_r = new_g = new_b = 0; pxl = f(srcback, x, y); new_a = gdImageAlpha(srcback, pxl); @@ -435,13 +451,13 @@ int gdImageConvolution(gdImagePtr src, float filter[3][3], float filter_div, flo new_g = (new_g/filter_div)+offset; new_b = (new_b/filter_div)+offset; - new_r = (new_r > 255.0f)? 255.0f : ((new_r < 0.0f)? 0.0f:new_r); - new_g = (new_g > 255.0f)? 255.0f : ((new_g < 0.0f)? 0.0f:new_g); - new_b = (new_b > 255.0f)? 255.0f : ((new_b < 0.0f)? 0.0f:new_b); + new_ri = gdClampFloatToByte(new_r); + new_gi = gdClampFloatToByte(new_g); + new_bi = gdClampFloatToByte(new_b); - new_pxl = gdImageColorAllocateAlpha(src, (int)new_r, (int)new_g, (int)new_b, new_a); + new_pxl = gdImageColorAllocateAlpha(src, new_ri, new_gi, new_bi, new_a); if (new_pxl == -1) { - new_pxl = gdImageColorClosestAlpha(src, (int)new_r, (int)new_g, (int)new_b, new_a); + new_pxl = gdImageColorClosestAlpha(src, new_ri, new_gi, new_bi, new_a); } gdImageSetPixel (src, x, y, new_pxl); } diff --git a/ext/gd/tests/gh19666.phpt b/ext/gd/tests/gh19666.phpt new file mode 100644 index 000000000000..ba9bf54f5661 --- /dev/null +++ b/ext/gd/tests/gh19666.phpt @@ -0,0 +1,32 @@ +--TEST-- +GH-19666 (Unexpected nan value in imageconvolution) +--EXTENSIONS-- +gd +--FILE-- + +--EXPECT-- +bool(true) +array(4) { + ["red"]=> + int(0) + ["green"]=> + int(0) + ["blue"]=> + int(0) + ["alpha"]=> + int(0) +} diff --git a/ext/zlib/tests/bug55544-win.phpt b/ext/zlib/tests/bug55544-win.phpt index 11116da28b6d..02a1ac837000 100644 Binary files a/ext/zlib/tests/bug55544-win.phpt and b/ext/zlib/tests/bug55544-win.phpt differ diff --git a/ext/zlib/tests/data/func.inc b/ext/zlib/tests/data/func.inc deleted file mode 100644 index 73cfc4e06ffc..000000000000 --- a/ext/zlib/tests/data/func.inc +++ /dev/null @@ -1,18 +0,0 @@ - (\d+\.\d+\.\d+),s', $info, $match)) { - // $version = $match[1]; - if (preg_match(',zlib(?!.*libXML).*Compiled Version (=> | --FILE-- diff --git a/ext/zlib/tests/gzgetc_basic.phpt b/ext/zlib/tests/gzgetc_basic.phpt index ce366e4b6b31..3540332a740e 100644 --- a/ext/zlib/tests/gzgetc_basic.phpt +++ b/ext/zlib/tests/gzgetc_basic.phpt @@ -4,8 +4,7 @@ Test function gzgetc() by calling it with its expected arguments zlib 1.2.5 zlib --SKIPIF-- 0) { +if (version_compare(ZLIB_VERSION, '1.2.5') > 0) { die('skip - only for zlib <= 1.2.5'); } ?> diff --git a/ext/zlib/tests/gzgetc_basic_1.phpt b/ext/zlib/tests/gzgetc_basic_1.phpt index cf6da96e5612..82d7c1941327 100644 --- a/ext/zlib/tests/gzgetc_basic_1.phpt +++ b/ext/zlib/tests/gzgetc_basic_1.phpt @@ -4,9 +4,7 @@ Test function gzgetc() by calling it with its expected arguments zlib 1.2.7 zlib --SKIPIF-- = 1.2.7'); } ?> diff --git a/main/getopt.c b/main/getopt.c index 5f3a0085cdac..210c32152415 100644 --- a/main/getopt.c +++ b/main/getopt.c @@ -18,15 +18,14 @@ #include #include "php_getopt.h" -#define OPTERRCOLON (1) -#define OPTERRNF (2) -#define OPTERRARG (3) +#define OPTERRCOLON 1 +#define OPTERRNF 2 +#define OPTERRARG 3 // Print error message to stderr and return -2 to distinguish it from '?' command line option. static int php_opt_error(int argc, char * const *argv, int optint, int optchr, int err, int show_err) /* {{{ */ { - if (show_err) - { + if (show_err) { fprintf(stderr, "Error in argument %d, char %d: ", optint, optchr+1); switch(err) { @@ -61,7 +60,7 @@ PHPAPI int php_getopt(int argc, char* const *argv, const opt_struct opts[], char *optarg = NULL; } - if(prev_optarg && prev_optarg != optarg) { + if (prev_optarg && prev_optarg != optarg) { /* reset the state */ optchr = 0; dash = 0; @@ -69,20 +68,18 @@ PHPAPI int php_getopt(int argc, char* const *argv, const opt_struct opts[], char prev_optarg = optarg; if (*optind >= argc) { - return(EOF); + return EOF; } if (!dash) { - if ((argv[*optind][0] != '-')) { - return(EOF); - } else { - if (!argv[*optind][1]) - { - /* - * use to specify stdin. Need to let pgm process this and - * the following args - */ - return(EOF); - } + if (argv[*optind][0] != '-') { + return EOF; + } + if (!argv[*optind][1]) { + /* + * use to specify stdin. Need to let pgm process this and + * the following args + */ + return EOF; } } if ((argv[*optind][0] == '-') && (argv[*optind][1] == '-')) { @@ -92,7 +89,7 @@ PHPAPI int php_getopt(int argc, char* const *argv, const opt_struct opts[], char /* '--' indicates end of args if not followed by a known long option name */ if (argv[*optind][2] == '\0') { (*optind)++; - return(EOF); + return EOF; } arg_start = 2; @@ -109,7 +106,7 @@ PHPAPI int php_getopt(int argc, char* const *argv, const opt_struct opts[], char php_optidx++; if (opts[php_optidx].opt_char == '-') { (*optind)++; - return(php_opt_error(argc, argv, *optind-1, optchr, OPTERRARG, show_err)); + return php_opt_error(argc, argv, *optind-1, optchr, OPTERRARG, show_err); } else if (opts[php_optidx].opt_name && !strncmp(&argv[*optind][2], opts[php_optidx].opt_name, arg_end) && arg_end == strlen(opts[php_optidx].opt_name)) { break; } @@ -127,7 +124,7 @@ PHPAPI int php_getopt(int argc, char* const *argv, const opt_struct opts[], char if (argv[*optind][optchr] == ':') { dash = 0; (*optind)++; - return (php_opt_error(argc, argv, *optind-1, optchr, OPTERRCOLON, show_err)); + return php_opt_error(argc, argv, *optind-1, optchr, OPTERRCOLON, show_err); } arg_start = 1 + optchr; } @@ -145,7 +142,7 @@ PHPAPI int php_getopt(int argc, char* const *argv, const opt_struct opts[], char optchr++; arg_start++; } - return(php_opt_error(argc, argv, errind, errchr, OPTERRNF, show_err)); + return php_opt_error(argc, argv, errind, errchr, OPTERRNF, show_err); } else if (argv[*optind][optchr] == opts[php_optidx].opt_char) { break; } @@ -160,7 +157,7 @@ PHPAPI int php_getopt(int argc, char* const *argv, const opt_struct opts[], char if (*optind == argc) { /* Was the value required or is it optional? */ if (opts[php_optidx].need_param == 1) { - return(php_opt_error(argc, argv, *optind-1, optchr, OPTERRARG, show_err)); + return php_opt_error(argc, argv, *optind-1, optchr, OPTERRARG, show_err); } /* Optional value is not supported with - style */ } else if (opts[php_optidx].need_param == 1) { @@ -178,8 +175,7 @@ PHPAPI int php_getopt(int argc, char* const *argv, const opt_struct opts[], char } else { /* multiple options specified as one (exclude long opts) */ if (arg_start >= 2 && !((argv[*optind][0] == '-') && (argv[*optind][1] == '-'))) { - if (!argv[*optind][optchr+1]) - { + if (!argv[*optind][optchr+1]) { dash = 0; (*optind)++; } else { @@ -191,6 +187,6 @@ PHPAPI int php_getopt(int argc, char* const *argv, const opt_struct opts[], char return opts[php_optidx].opt_char; } assert(0); - return(0); /* never reached */ + return 0; /* never reached */ } /* }}} */