]> granicus.if.org Git - php/commitdiff
Added "argv" and "argc" as known strings.
authorDmitry Stogov <dmitry@zend.com>
Thu, 30 Nov 2017 22:35:47 +0000 (01:35 +0300)
committerDmitry Stogov <dmitry@zend.com>
Thu, 30 Nov 2017 22:35:47 +0000 (01:35 +0300)
Fixed incorrect "argc" update and corresponding phpdbg test.

Zend/zend_string.h
ext/standard/basic_functions.c
main/php_variables.c
sapi/phpdbg/tests/run_001.phpt

index 72a9b7d1bbfea2b9861e6075017e49f6fc9ad459..eb981df82290ef5c2d9e6cfc6488c69144696ff4 100644 (file)
@@ -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 {
index 7cc3b0a0d5b4d253063f09e40fbd5d767dc8300c..0b5262487bf223369fd443ff47b28343d5c087b5 100644 (file)
@@ -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;
index a23186ce45b09f892746d3647dbc06312215aadd..43cadb147a1bae7dcd334bccc4fa6404b2cafa02 100644 (file)
@@ -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]);
index 30aab1f17ad271ae70130341bb8dd2c724f9fc07..626ecb323b2d8a9b2d28c4f873a9bf37a68937e2 100644 (file)
@@ -21,7 +21,7 @@ array(5) {
   string(1) "3"
 }
 [Script ended normally]
-prompt> int(5)
+prompt> int(4)
 array(4) {
   [0]=>
   string(%d) "%s"