summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnatol Belski <ab@php.net>2016-11-22 02:28:45 +0100
committerAnatol Belski <ab@php.net>2016-11-22 02:28:45 +0100
commitb52fa5882a276c9397d108cd690721a006acd827 (patch)
tree50328e348ae971497f67b28fe9c249db80e58770
parentd30b73a7d48e63b26c61c70fffbc930bd64431b0 (diff)
downloadphp-git-b52fa5882a276c9397d108cd690721a006acd827.tar.gz
fix invalid read, follow up on 97b65cc9
-rw-r--r--Zend/zend_ini_parser.y8
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);
+ }
}
/* }}} */