diff --git a/Zend/tests/gh20113.phpt b/Zend/tests/gh20113.phpt new file mode 100644 index 0000000000000..64e029a6cec17 --- /dev/null +++ b/Zend/tests/gh20113.phpt @@ -0,0 +1,8 @@ +--TEST-- +GH-20113: new Foo(...) error in constant expressions +--FILE-- + +--EXPECTF-- +Fatal error: Cannot create Closure for new expression in %s on line %d diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 7d4b900990b5f..d61c2df0a3555 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -11488,6 +11488,11 @@ static void zend_compile_const_expr_new(zend_ast **ast_ptr) { zend_ast *class_ast = (*ast_ptr)->child[0]; zend_compile_const_expr_class_reference(class_ast); + + zend_ast *args_ast = (*ast_ptr)->child[1]; + if (args_ast->kind == ZEND_AST_CALLABLE_CONVERT) { + zend_error_noreturn(E_COMPILE_ERROR, "Cannot create Closure for new expression"); + } } static void zend_compile_const_expr_closure(zend_ast **ast_ptr) diff --git a/php.ini-development b/php.ini-development index 7018682fb0d9a..6f93f440112ea 100644 --- a/php.ini-development +++ b/php.ini-development @@ -807,10 +807,10 @@ enable_dl = Off ;fastcgi.impersonate = 1 ; Prevent decoding of SCRIPT_FILENAME when using Apache ProxyPass or -; ProxyPassMatch. This should only be used if script file paths are already -; stored in an encoded format on the file system. -; Default is 0. -;fastcgi.script_path_encoded = 1 +; ProxyPassMatch. This should be used if script file paths are not stored +; in an encoded format on the file system. +; Default is 1. +;fastcgi.script_path_encoded = 0 ; Disable logging through FastCGI connection. PHP's default behavior is to enable ; this feature. diff --git a/php.ini-production b/php.ini-production index 602d005afd54f..9aafad21e9c74 100644 --- a/php.ini-production +++ b/php.ini-production @@ -809,10 +809,10 @@ enable_dl = Off ;fastcgi.impersonate = 1 ; Prevent decoding of SCRIPT_FILENAME when using Apache ProxyPass or -; ProxyPassMatch. This should only be used if script file paths are already -; stored in an encoded format on the file system. -; Default is 0. -;fastcgi.script_path_encoded = 1 +; ProxyPassMatch. This should be used if script file paths are not stored +; in an encoded format on the file system. +; Default is 1. +;fastcgi.script_path_encoded = 0 ; Disable logging through FastCGI connection. PHP's default behavior is to enable ; this feature. diff --git a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c index fa2417122e736..cc89b8c07c155 100644 --- a/sapi/fpm/fpm/fpm_main.c +++ b/sapi/fpm/fpm/fpm_main.c @@ -1435,7 +1435,7 @@ PHP_INI_BEGIN() STD_PHP_INI_BOOLEAN("cgi.nph", "0", PHP_INI_ALL, OnUpdateBool, nph, php_cgi_globals_struct, php_cgi_globals) STD_PHP_INI_BOOLEAN("cgi.fix_pathinfo", "1", PHP_INI_SYSTEM, OnUpdateBool, fix_pathinfo, php_cgi_globals_struct, php_cgi_globals) STD_PHP_INI_BOOLEAN("cgi.discard_path", "0", PHP_INI_SYSTEM, OnUpdateBool, discard_path, php_cgi_globals_struct, php_cgi_globals) - STD_PHP_INI_BOOLEAN("fastcgi.script_path_encoded", "0", PHP_INI_SYSTEM, OnUpdateBool, fcgi_script_path_encoded, php_cgi_globals_struct, php_cgi_globals) + STD_PHP_INI_BOOLEAN("fastcgi.script_path_encoded", "1", PHP_INI_SYSTEM, OnUpdateBool, fcgi_script_path_encoded, php_cgi_globals_struct, php_cgi_globals) STD_PHP_INI_BOOLEAN("fastcgi.logging", "1", PHP_INI_SYSTEM, OnUpdateBool, fcgi_logging, php_cgi_globals_struct, php_cgi_globals) STD_PHP_INI_ENTRY("fastcgi.error_header", NULL, PHP_INI_SYSTEM, OnUpdateString, error_header, php_cgi_globals_struct, php_cgi_globals) STD_PHP_INI_ENTRY("fpm.config", NULL, PHP_INI_SYSTEM, OnUpdateString, fpm_config, php_cgi_globals_struct, php_cgi_globals) @@ -1448,7 +1448,7 @@ static void php_cgi_globals_ctor(php_cgi_globals_struct *php_cgi_globals) php_cgi_globals->nph = 0; php_cgi_globals->fix_pathinfo = 1; php_cgi_globals->discard_path = 0; - php_cgi_globals->fcgi_script_path_encoded = 0; + php_cgi_globals->fcgi_script_path_encoded = 1; php_cgi_globals->fcgi_logging = 1; php_cgi_globals->fcgi_logging_request_started = false; zend_hash_init(&php_cgi_globals->user_config_cache, 0, NULL, user_config_cache_entry_dtor, 1); diff --git a/sapi/fpm/tests/fcgi-env-pif-apache-pp-sfp-decoding.phpt b/sapi/fpm/tests/fcgi-env-pif-apache-pp-sfp-decoding.phpt index d6189107fb84b..251a634b0b77b 100644 --- a/sapi/fpm/tests/fcgi-env-pif-apache-pp-sfp-decoding.phpt +++ b/sapi/fpm/tests/fcgi-env-pif-apache-pp-sfp-decoding.phpt @@ -18,6 +18,7 @@ pm.start_servers = 1 pm.min_spare_servers = 1 pm.max_spare_servers = 3 php_admin_value[cgi.fix_pathinfo] = yes +php_admin_value[fastcgi.script_path_encoded] = no EOT; $code = << --FILE-- @@ -18,7 +18,6 @@ pm.start_servers = 1 pm.min_spare_servers = 1 pm.max_spare_servers = 3 php_admin_value[cgi.fix_pathinfo] = yes -php_admin_value[fastcgi.script_path_encoded] = yes EOT; $code = <<