From 7cc6f601345ea59b5a6a20b45e72328489a48336 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Fri, 1 Dec 2017 01:35:47 +0300 Subject: [PATCH] Added "argv" and "argc" as known strings. Fixed incorrect "argc" update and corresponding phpdbg test. --- Zend/zend_string.h | 2 ++ ext/standard/basic_functions.c | 4 ++-- main/php_variables.c | 16 ++++++++-------- sapi/phpdbg/tests/run_001.phpt | 2 +- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/Zend/zend_string.h b/Zend/zend_string.h index 72a9b7d1bb..eb981df822 100644 --- a/Zend/zend_string.h +++ b/Zend/zend_string.h @@ -419,6 +419,8 @@ EMPTY_SWITCH_DEFAULT_CASE() _(ZEND_STR_RESOURCE, "resource") \ _(ZEND_STR_CLOSED_RESOURCE, "resource (closed)") \ _(ZEND_STR_NAME, "name") \ + _(ZEND_STR_ARGV, "argv") \ + _(ZEND_STR_ARGC, "argc") \ typedef enum _zend_known_string_id { diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 7cc3b0a0d5..0b5262487b 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -4361,8 +4361,8 @@ PHP_FUNCTION(getopt) * in order to be on the safe side, even though it is also available * from the symbol table. */ if ((Z_TYPE(PG(http_globals)[TRACK_VARS_SERVER]) == IS_ARRAY || zend_is_auto_global_str(ZEND_STRL("_SERVER"))) && - ((args = zend_hash_str_find_ind(Z_ARRVAL_P(&PG(http_globals)[TRACK_VARS_SERVER]), "argv", sizeof("argv")-1)) != NULL || - (args = zend_hash_str_find_ind(&EG(symbol_table), "argv", sizeof("argv")-1)) != NULL) + ((args = zend_hash_find_ind(Z_ARRVAL_P(&PG(http_globals)[TRACK_VARS_SERVER]), ZSTR_KNOWN(ZEND_STR_ARGV))) != NULL || + (args = zend_hash_find_ind(&EG(symbol_table), ZSTR_KNOWN(ZEND_STR_ARGV))) != NULL) ) { int pos = 0; zval *entry; diff --git a/main/php_variables.c b/main/php_variables.c index a23186ce45..43cadb147a 100644 --- a/main/php_variables.c +++ b/main/php_variables.c @@ -604,13 +604,13 @@ PHPAPI void php_build_argv(char *s, zval *track_vars_array) if (SG(request_info).argc) { Z_ADDREF(arr); - zend_hash_str_update(&EG(symbol_table), "argv", sizeof("argv")-1, &arr); - zend_hash_str_add(&EG(symbol_table), "argc", sizeof("argc")-1, &argc); + zend_hash_update(&EG(symbol_table), ZSTR_KNOWN(ZEND_STR_ARGV), &arr); + zend_hash_update(&EG(symbol_table), ZSTR_KNOWN(ZEND_STR_ARGC), &argc); } if (track_vars_array && Z_TYPE_P(track_vars_array) == IS_ARRAY) { Z_ADDREF(arr); - zend_hash_str_update(Z_ARRVAL_P(track_vars_array), "argv", sizeof("argv")-1, &arr); - zend_hash_str_update(Z_ARRVAL_P(track_vars_array), "argc", sizeof("argc")-1, &argc); + zend_hash_update(Z_ARRVAL_P(track_vars_array), ZSTR_KNOWN(ZEND_STR_ARGV), &arr); + zend_hash_update(Z_ARRVAL_P(track_vars_array), ZSTR_KNOWN(ZEND_STR_ARGC), &argc); } zval_ptr_dtor_nogc(&arr); } @@ -781,11 +781,11 @@ static zend_bool php_auto_globals_create_server(zend_string *name) if (SG(request_info).argc) { zval *argc, *argv; - if ((argc = zend_hash_str_find_ind(&EG(symbol_table), "argc", sizeof("argc")-1)) != NULL && - (argv = zend_hash_str_find_ind(&EG(symbol_table), "argv", sizeof("argv")-1)) != NULL) { + if ((argc = zend_hash_find_ind(&EG(symbol_table), ZSTR_KNOWN(ZEND_STR_ARGC))) != NULL && + (argv = zend_hash_find_ind(&EG(symbol_table), ZSTR_KNOWN(ZEND_STR_ARGV))) != NULL) { Z_ADDREF_P(argv); - zend_hash_str_update(Z_ARRVAL(PG(http_globals)[TRACK_VARS_SERVER]), "argv", sizeof("argv")-1, argv); - zend_hash_str_update(Z_ARRVAL(PG(http_globals)[TRACK_VARS_SERVER]), "argc", sizeof("argc")-1, argc); + zend_hash_update(Z_ARRVAL(PG(http_globals)[TRACK_VARS_SERVER]), ZSTR_KNOWN(ZEND_STR_ARGV), argv); + zend_hash_update(Z_ARRVAL(PG(http_globals)[TRACK_VARS_SERVER]), ZSTR_KNOWN(ZEND_STR_ARGC), argc); } } else { php_build_argv(SG(request_info).query_string, &PG(http_globals)[TRACK_VARS_SERVER]); diff --git a/sapi/phpdbg/tests/run_001.phpt b/sapi/phpdbg/tests/run_001.phpt index 30aab1f17a..626ecb323b 100644 --- a/sapi/phpdbg/tests/run_001.phpt +++ b/sapi/phpdbg/tests/run_001.phpt @@ -21,7 +21,7 @@ array(5) { string(1) "3" } [Script ended normally] -prompt> int(5) +prompt> int(4) array(4) { [0]=> string(%d) "%s" -- 2.40.0