From fe28be63e75b1c7a83e04109dcf3bc27ab1afdd0 Mon Sep 17 00:00:00 2001 From: arshidkv12 Date: Sat, 14 Mar 2026 14:50:07 +0530 Subject: [PATCH] ext/phar Use zend_string_concat2 instead of manual zend_string_alloc/memcpy --- ext/phar/stream.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/ext/phar/stream.c b/ext/phar/stream.c index 4bd53c98fced6..786b195517861 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);