diff options
author | Anatol Belski <ab@php.net> | 2016-11-22 02:28:45 +0100 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2016-11-22 02:28:45 +0100 |
commit | b52fa5882a276c9397d108cd690721a006acd827 (patch) | |
tree | 50328e348ae971497f67b28fe9c249db80e58770 | |
parent | d30b73a7d48e63b26c61c70fffbc930bd64431b0 (diff) | |
download | php-git-b52fa5882a276c9397d108cd690721a006acd827.tar.gz |
fix invalid read, follow up on 97b65cc9
-rw-r--r-- | Zend/zend_ini_parser.y | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/Zend/zend_ini_parser.y b/Zend/zend_ini_parser.y index 5e38defb15..458808eb85 100644 --- a/Zend/zend_ini_parser.y +++ b/Zend/zend_ini_parser.y @@ -109,16 +109,16 @@ static void zend_ini_init_string(zval *result) static void zend_ini_add_string(zval *result, zval *op1, zval *op2) { int length, op1_len; + zend_string *str = NULL; if (Z_TYPE_P(op1) != IS_STRING) { - zend_string *str = zval_get_string(op1); + str = zval_get_string(op1); /* ZEND_ASSERT(!Z_REFCOUNTED_P(op1)); */ if (ZEND_SYSTEM_INI) { ZVAL_PSTRINGL(op1, ZSTR_VAL(str), ZSTR_LEN(str)); } else { ZVAL_STR(op1, str); } - zend_string_release(str); } op1_len = (int)Z_STRLEN_P(op1); @@ -129,6 +129,10 @@ static void zend_ini_add_string(zval *result, zval *op1, zval *op2) ZVAL_NEW_STR(result, zend_string_extend(Z_STR_P(op1), length, ZEND_SYSTEM_INI)); memcpy(Z_STRVAL_P(result) + op1_len, Z_STRVAL_P(op2), Z_STRLEN_P(op2) + 1); + + if (str) { + zend_string_release(str); + } } /* }}} */ |