Commit 006f141dd69 for php.net
commit 006f141dd694a0803bde83f76749a45d04d133df
Author: Arshid <arshidkv12@gmail.com>
Date: Sat Mar 14 18:58:00 2026 +0530
ext/phar: Use zend_string_concat2 instead of manual zend_string_alloc/memcpy (#21441)
diff --git a/ext/phar/stream.c b/ext/phar/stream.c
index 4bd53c98fce..786b1955178 100644
--- a/ext/phar/stream.c
+++ b/ext/phar/stream.c
@@ -887,10 +887,10 @@ static int phar_wrapper_rename(php_stream_wrapper *wrapper, const char *url_from
memcmp(ZSTR_VAL(str_key), ZSTR_VAL(resource_from->path)+1, from_len) == 0 &&
IS_SLASH(ZSTR_VAL(str_key)[from_len])) {
- new_str_key = zend_string_alloc(ZSTR_LEN(str_key) + to_len - from_len, 0);
- memcpy(ZSTR_VAL(new_str_key), ZSTR_VAL(resource_to->path) + 1, to_len);
- memcpy(ZSTR_VAL(new_str_key) + to_len, ZSTR_VAL(str_key) + from_len, ZSTR_LEN(str_key) - from_len);
- ZSTR_VAL(new_str_key)[ZSTR_LEN(new_str_key)] = 0;
+ new_str_key = zend_string_concat2(
+ ZSTR_VAL(resource_to->path) + 1, to_len,
+ ZSTR_VAL(str_key) + from_len, ZSTR_LEN(str_key) - from_len
+ );
is_modified = true;
entry->is_modified = true;
@@ -909,10 +909,10 @@ static int phar_wrapper_rename(php_stream_wrapper *wrapper, const char *url_from
if (zend_string_starts_with_cstr(str_key, ZSTR_VAL(resource_from->path)+1, from_len) &&
(ZSTR_LEN(str_key) == from_len || IS_SLASH(ZSTR_VAL(str_key)[from_len]))) {
- new_str_key = zend_string_alloc(ZSTR_LEN(str_key) + to_len - from_len, 0);
- memcpy(ZSTR_VAL(new_str_key), ZSTR_VAL(resource_to->path) + 1, to_len);
- memcpy(ZSTR_VAL(new_str_key) + to_len, ZSTR_VAL(str_key) + from_len, ZSTR_LEN(str_key) - from_len);
- ZSTR_VAL(new_str_key)[ZSTR_LEN(new_str_key)] = 0;
+ new_str_key = zend_string_concat2(
+ ZSTR_VAL(resource_to->path) + 1, to_len,
+ ZSTR_VAL(str_key) + from_len, ZSTR_LEN(str_key) - from_len
+ );
zend_string_release_ex(str_key, 0);
b->h = zend_string_hash_val(new_str_key);
@@ -926,10 +926,10 @@ static int phar_wrapper_rename(php_stream_wrapper *wrapper, const char *url_from
if (zend_string_starts_with_cstr(str_key, ZSTR_VAL(resource_from->path)+1, from_len) &&
(ZSTR_LEN(str_key) == from_len || IS_SLASH(ZSTR_VAL(str_key)[from_len]))) {
- new_str_key = zend_string_alloc(ZSTR_LEN(str_key) + to_len - from_len, 0);
- memcpy(ZSTR_VAL(new_str_key), ZSTR_VAL(resource_to->path) + 1, to_len);
- memcpy(ZSTR_VAL(new_str_key) + to_len, ZSTR_VAL(str_key) + from_len, ZSTR_LEN(str_key) - from_len);
- ZSTR_VAL(new_str_key)[ZSTR_LEN(new_str_key)] = 0;
+ new_str_key = zend_string_concat2(
+ ZSTR_VAL(resource_to->path) + 1, to_len,
+ ZSTR_VAL(str_key) + from_len, ZSTR_LEN(str_key) - from_len
+ );
zend_string_release_ex(str_key, 0);
b->h = zend_string_hash_val(new_str_key);