From: Christoph M. Becker Date: Tue, 11 Feb 2020 11:07:19 +0000 (+0100) Subject: Merge branch 'PHP-7.4' X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=69819baee34f24e42305516e61fdc7e61593a3bb;p=php Merge branch 'PHP-7.4' * PHP-7.4: Fix #79254: getenv() w/o arguments not showing changes --- 69819baee34f24e42305516e61fdc7e61593a3bb diff --cc main/php_variables.c index 8edbcac628,1a40c2a19f..6fb6ca000d --- a/main/php_variables.c +++ b/main/php_variables.c @@@ -545,32 -547,51 +545,45 @@@ static zend_always_inline void import_e zval val; zend_ulong idx; + p = strchr(env, '='); + if (!p + || p == env + || !valid_environment_name(env, p)) { + /* malformed entry? */ + return; + } + name_len = p - env; + p++; + len = strlen(p); + if (len == 0) { + ZVAL_EMPTY_STRING(&val); + } else if (len == 1) { + ZVAL_INTERNED_STR(&val, ZSTR_CHAR((zend_uchar)*p)); + } else { + ZVAL_NEW_STR(&val, zend_string_init(p, len, 0)); + } + if (ZEND_HANDLE_NUMERIC_STR(env, name_len, idx)) { + zend_hash_index_update(ht, idx, &val); + } else { + php_register_variable_quick(env, name_len, &val, ht); + } + } + + void _php_import_environment_variables(zval *array_ptr) + { -#ifndef PHP_WIN32 - char **env; -#else - char *environment, *env; -#endif - tsrm_env_lock(); - for (env = environ; env != NULL && *env != NULL; env++) { - p = strchr(*env, '='); - if (!p - || p == *env - || !valid_environment_name(*env, p)) { - /* malformed entry? */ - continue; - } - name_len = p - *env; - p++; - len = strlen(p); - if (len == 0) { - ZVAL_EMPTY_STRING(&val); - } else if (len == 1) { - ZVAL_INTERNED_STR(&val, ZSTR_CHAR((zend_uchar)*p)); - } else { - ZVAL_NEW_STR(&val, zend_string_init(p, len, 0)); - } - if (ZEND_HANDLE_NUMERIC_STR(*env, name_len, idx)) { - zend_hash_index_update(Z_ARRVAL_P(array_ptr), idx, &val); - } else { - php_register_variable_quick(*env, name_len, &val, Z_ARRVAL_P(array_ptr)); - } + #ifndef PHP_WIN32 - for (env = environ; env != NULL && *env != NULL; env++) { ++ for (char **env = environ; env != NULL && *env != NULL; env++) { + import_environment_variable(Z_ARRVAL_P(array_ptr), *env); + } + #else - environment = GetEnvironmentStringsA(); - for (env = environment; env != NULL && *env; env += strlen(env) + 1) { ++ char *environment = GetEnvironmentStringsA(); ++ for (char *env = environment; env != NULL && *env; env += strlen(env) + 1) { + import_environment_variable(Z_ARRVAL_P(array_ptr), env); } + FreeEnvironmentStringsA(environment); + #endif tsrm_env_unlock(); }