diff options
author | Anatol Belski <ab@php.net> | 2015-12-22 14:33:19 +0100 |
---|---|---|
committer | Anatol Belski <ab@php.net> | 2015-12-22 14:33:19 +0100 |
commit | 4037ba5847d04d143d5e165e90e1fbc5fe760c59 (patch) | |
tree | b39dd4311c158bc67c6e480ca873218813d70631 /ext | |
parent | a3e37e0818220a450dd2915c31df47a9fa08c6bb (diff) | |
download | php-git-4037ba5847d04d143d5e165e90e1fbc5fe760c59.tar.gz |
release only appropriate string
Diffstat (limited to 'ext')
-rw-r--r-- | ext/standard/string.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/ext/standard/string.c b/ext/standard/string.c index 34ef5a6633..0e4e48fd36 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -2496,6 +2496,7 @@ PHP_FUNCTION(substr_replace) if (Z_TYPE_P(str) != IS_ARRAY) { if (Z_TYPE_P(from) != IS_ARRAY) { zend_string *repl_str; + zend_bool repl_release = 0; f = Z_LVAL_P(from); /* if "from" position is negative, count start position from the end @@ -2537,6 +2538,7 @@ PHP_FUNCTION(substr_replace) } if (repl_idx < Z_ARRVAL_P(repl)->nNumUsed) { repl_str = zval_get_string(tmp_repl); + repl_release = 1; } else { repl_str = STR_EMPTY_ALLOC(); } @@ -2552,7 +2554,9 @@ PHP_FUNCTION(substr_replace) } memcpy((ZSTR_VAL(result) + f + ZSTR_LEN(repl_str)), Z_STRVAL_P(str) + f + l, Z_STRLEN_P(str) - f - l); ZSTR_VAL(result)[ZSTR_LEN(result)] = '\0'; - zend_string_release(repl_str); + if (repl_release) { + zend_string_release(repl_str); + } RETURN_NEW_STR(result); } else { php_error_docref(NULL, E_WARNING, "Functionality of 'from' and 'len' as arrays is not implemented"); |