diff options
author | Tjerk Meesters <datibbaw@php.net> | 2015-08-15 14:44:07 +0800 |
---|---|---|
committer | Tjerk Meesters <datibbaw@php.net> | 2015-08-15 15:10:34 +0800 |
commit | 0d7159d26d277e34b4b2df4c1e49ec51ffb229cf (patch) | |
tree | b386c5f7512601792cebf2f6091fce10f82abaf3 /ext/standard/basic_functions.c | |
parent | a4e05391880dc165e7d59357b3e69a04b534e87d (diff) | |
download | php-git-0d7159d26d277e34b4b2df4c1e49ec51ffb229cf.tar.gz |
Fixed #70157 parse_ini_string() segmentation fault with INI_SCANNER_TYPED
Diffstat (limited to 'ext/standard/basic_functions.c')
-rw-r--r-- | ext/standard/basic_functions.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 07348a23f7..1abe3e60ab 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -3515,7 +3515,7 @@ PHPAPI double php_get_inf(void) /* {{{ */ #define BASIC_ADD_SUBMODULE(module) \ zend_hash_add_empty_element(&basic_submodules, #module, strlen(#module)); - + #define BASIC_RINIT_SUBMODULE(module) \ if (zend_hash_exists(&basic_submodules, #module, strlen(#module))) { \ PHP_RINIT(module)(INIT_FUNC_ARGS_PASSTHRU); \ @@ -5903,10 +5903,11 @@ static void php_simple_ini_parser_cb(zval *arg1, zval *arg2, zval *arg3, int cal ALLOC_ZVAL(element); MAKE_COPY_ZVAL(&arg2, element); - if (arg3 && Z_STRLEN_P(arg3) > 0) { - add_assoc_zval_ex(hash, Z_STRVAL_P(arg3), Z_STRLEN_P(arg3) + 1, element); - } else { + if (!arg3 || (Z_TYPE_P(arg3) == IS_STRING && Z_STRLEN_P(arg3) == 0)) { add_next_index_zval(hash, element); + } else { + array_set_zval_key(Z_ARRVAL_P(hash), arg3, element); + zval_ptr_dtor(&element); } } break; |