diff --git a/NEWS b/NEWS index ca6b431d70cd8..509e5398563eb 100644 --- a/NEWS +++ b/NEWS @@ -134,6 +134,7 @@ PHP NEWS null destination). (David Carlier) . Fixed bug GH-13204 (glob() fails if square bracket is in current directory). (ndossche) + . Add array size maximum to array_diff(). (ndossche) - Streams: . Added so_keepalive, tcp_keepidle, tcp_keepintvl and tcp_keepcnt stream diff --git a/ext/ftp/php_ftp.c b/ext/ftp/php_ftp.c index 245d95bf1260b..671281ee4729f 100644 --- a/ext/ftp/php_ftp.c +++ b/ext/ftp/php_ftp.c @@ -1264,7 +1264,6 @@ PHP_FUNCTION(ftp_set_option) } ftp->timeout_sec = Z_LVAL_P(z_value); RETURN_TRUE; - break; case PHP_FTP_OPT_AUTOSEEK: if (Z_TYPE_P(z_value) != IS_TRUE && Z_TYPE_P(z_value) != IS_FALSE) { zend_argument_type_error(3, "must be of type bool for the FTP_AUTOSEEK option, %s given", zend_zval_value_name(z_value)); @@ -1272,7 +1271,6 @@ PHP_FUNCTION(ftp_set_option) } ftp->autoseek = Z_TYPE_P(z_value) == IS_TRUE ? 1 : 0; RETURN_TRUE; - break; case PHP_FTP_OPT_USEPASVADDRESS: if (Z_TYPE_P(z_value) != IS_TRUE && Z_TYPE_P(z_value) != IS_FALSE) { zend_argument_type_error(3, "must be of type bool for the FTP_USEPASVADDRESS option, %s given", zend_zval_value_name(z_value)); @@ -1280,11 +1278,9 @@ PHP_FUNCTION(ftp_set_option) } ftp->usepasvaddress = Z_TYPE_P(z_value) == IS_TRUE ? 1 : 0; RETURN_TRUE; - break; default: zend_argument_value_error(2, "must be one of FTP_TIMEOUT_SEC, FTP_AUTOSEEK, or FTP_USEPASVADDRESS"); RETURN_THROWS(); - break; } } /* }}} */ @@ -1304,13 +1300,10 @@ PHP_FUNCTION(ftp_get_option) switch (option) { case PHP_FTP_OPT_TIMEOUT_SEC: RETURN_LONG(ftp->timeout_sec); - break; case PHP_FTP_OPT_AUTOSEEK: RETURN_BOOL(ftp->autoseek); - break; case PHP_FTP_OPT_USEPASVADDRESS: RETURN_BOOL(ftp->usepasvaddress); - break; default: zend_argument_value_error(2, "must be one of FTP_TIMEOUT_SEC, FTP_AUTOSEEK, or FTP_USEPASVADDRESS"); RETURN_THROWS(); diff --git a/ext/lexbor/config.m4 b/ext/lexbor/config.m4 index 3e67c10fdfc32..ee136881c5be6 100644 --- a/ext/lexbor/config.m4 +++ b/ext/lexbor/config.m4 @@ -2,7 +2,6 @@ PHP_LEXBOR_CFLAGS="-I@ext_srcdir@/" LEXBOR_DIR="lexbor" AC_DEFINE([HAVE_LEXBOR], [1], [Define to 1 if the PHP extension 'lexbor' is available.]) -AC_DEFINE([LEXBOR_VERSION], ["2.5.0"], [Define the main Lexbor version]) PHP_NEW_EXTENSION([lexbor], m4_normalize([ php_lexbor.c diff --git a/ext/lexbor/config.w32 b/ext/lexbor/config.w32 index bd1f3b383a7e2..900cc91e9dd43 100644 --- a/ext/lexbor/config.w32 +++ b/ext/lexbor/config.w32 @@ -24,6 +24,5 @@ ADD_SOURCES("ext/lexbor/lexbor/url", "url.c","lexbor"); ADD_FLAG("CFLAGS_LEXBOR", "/D LEXBOR_BUILDING /utf-8"); AC_DEFINE("HAVE_LEXBOR", 1, "Define to 1 if the PHP extension 'lexbor' is available."); -AC_DEFINE("LEXBOR_VERSION", "2.5.0", "Define the main Lexbor version") PHP_INSTALL_HEADERS("ext/lexbor", "php_lexbor.h lexbor/"); diff --git a/ext/lexbor/php_lexbor.c b/ext/lexbor/php_lexbor.c index 7f847bfb0afeb..af61f90291df8 100644 --- a/ext/lexbor/php_lexbor.c +++ b/ext/lexbor/php_lexbor.c @@ -22,6 +22,7 @@ #include "php.h" #include "zend_globals.h" #include "ext/standard/info.h" +#include "lexbor/core/base.h" #include "lexbor/core/types.h" #include "lexbor/core/lexbor.h" @@ -53,7 +54,7 @@ static PHP_MINFO_FUNCTION(lexbor) { php_info_print_table_start(); php_info_print_table_row(2, "Lexbor support", "active"); - php_info_print_table_row(2, "Lexbor version", LEXBOR_VERSION); + php_info_print_table_row(2, "Lexbor version", LEXBOR_VERSION_STRING); php_info_print_table_end(); } diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c index 1ec9ec85729a5..bc00b6b189b9b 100644 --- a/ext/openssl/openssl.c +++ b/ext/openssl/openssl.c @@ -2712,16 +2712,21 @@ PHP_FUNCTION(openssl_pkcs7_encrypt) /* tack on extra headers */ if (zheaders) { ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(zheaders), strindex, zcertval) { + int ret; zend_string *str = zval_try_get_string(zcertval); if (UNEXPECTED(!str)) { goto clean_exit; } if (strindex) { - BIO_printf(outfile, "%s: %s\n", ZSTR_VAL(strindex), ZSTR_VAL(str)); + ret = BIO_printf(outfile, "%s: %s\n", ZSTR_VAL(strindex), ZSTR_VAL(str)); } else { - BIO_printf(outfile, "%s\n", ZSTR_VAL(str)); + ret = BIO_printf(outfile, "%s\n", ZSTR_VAL(str)); } zend_string_release(str); + if (ret < 0) { + php_openssl_store_errors(); + goto clean_exit; + } } ZEND_HASH_FOREACH_END(); } @@ -2941,6 +2946,7 @@ PHP_FUNCTION(openssl_pkcs7_sign) zend_string_release(str); if (ret < 0) { php_openssl_store_errors(); + goto clean_exit; } } ZEND_HASH_FOREACH_END(); } @@ -3341,16 +3347,21 @@ PHP_FUNCTION(openssl_cms_encrypt) /* tack on extra headers */ if (zheaders && encoding == ENCODING_SMIME) { ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(zheaders), strindex, zcertval) { + int ret; zend_string *str = zval_try_get_string(zcertval); if (UNEXPECTED(!str)) { goto clean_exit; } if (strindex) { - BIO_printf(outfile, "%s: %s\n", ZSTR_VAL(strindex), ZSTR_VAL(str)); + ret = BIO_printf(outfile, "%s: %s\n", ZSTR_VAL(strindex), ZSTR_VAL(str)); } else { - BIO_printf(outfile, "%s\n", ZSTR_VAL(str)); + ret = BIO_printf(outfile, "%s\n", ZSTR_VAL(str)); } zend_string_release(str); + if (ret < 0) { + php_openssl_store_errors(); + goto clean_exit; + } } ZEND_HASH_FOREACH_END(); } @@ -3631,6 +3642,7 @@ PHP_FUNCTION(openssl_cms_sign) zend_string_release(str); if (ret < 0) { php_openssl_store_errors(); + goto clean_exit; } } ZEND_HASH_FOREACH_END(); } diff --git a/ext/pgsql/pgsql.c b/ext/pgsql/pgsql.c index f50bc680c4b9a..2cef31c28710b 100644 --- a/ext/pgsql/pgsql.c +++ b/ext/pgsql/pgsql.c @@ -1814,18 +1814,14 @@ static void php_pgsql_get_field_info(INTERNAL_FUNCTION_PARAMETERS, int entry_typ switch (entry_type) { case PHP_PG_FIELD_NAME: RETURN_STRING(PQfname(pgsql_result, (int)field)); - break; case PHP_PG_FIELD_SIZE: RETURN_LONG(PQfsize(pgsql_result, (int)field)); - break; case PHP_PG_FIELD_TYPE: RETURN_STR(get_field_name(pg_result->conn, PQftype(pgsql_result, (int)field))); - break; case PHP_PG_FIELD_TYPE_OID: oid = PQftype(pgsql_result, (int)field); PGSQL_RETURN_OID(oid); - break; EMPTY_SWITCH_DEFAULT_CASE() } } @@ -4545,8 +4541,8 @@ PHP_FUNCTION(pg_flush) } switch (ret) { - case 0: RETURN_TRUE; break; - case 1: RETURN_LONG(0); break; + case 0: RETURN_TRUE; + case 1: RETURN_LONG(0); default: RETURN_FALSE; } } diff --git a/ext/standard/array.c b/ext/standard/array.c index 640d832dd1d2d..3ee5afa70f8fa 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -5741,7 +5741,7 @@ PHP_FUNCTION(array_diff) { zval *args; uint32_t argc, i; - uint32_t num; + uint64_t num; HashTable exclude; zval *value; zend_string *str, *tmp_str, *key; @@ -5831,6 +5831,11 @@ PHP_FUNCTION(array_diff) return; } + if (UNEXPECTED(num >= HT_MAX_SIZE)) { + zend_throw_error(NULL, "The total number of elements must be lower than %u", HT_MAX_SIZE); + RETURN_THROWS(); + } + ZVAL_NULL(&dummy); /* create exclude map */ zend_hash_init(&exclude, num, NULL, NULL, 0);