From baad81b5f3c28f33254f34196b2f4d7e35d60df4 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sat, 4 Jan 2025 13:25:09 +0100 Subject: [PATCH] Avoid copying request strings in phar_parse_pharfile() --- ext/phar/phar.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ext/phar/phar.c b/ext/phar/phar.c index a3a2441d1e708..89c4a1209479f 100644 --- a/ext/phar/phar.c +++ b/ext/phar/phar.c @@ -1226,14 +1226,15 @@ static zend_result phar_parse_pharfile(php_stream *fp, char *fname, size_t fname /* if signature matched, no need to check CRC32 for each file */ entry.is_crc_checked = (manifest_flags & PHAR_HDR_SIGNATURE ? 1 : 0); phar_set_inode(&entry); - // TODO: avoid copy if (mydata->is_persistent) { str = zend_string_init_interned(ZSTR_VAL(entry.filename), ZSTR_LEN(entry.filename), 1); } else { - str = zend_string_init(ZSTR_VAL(entry.filename), ZSTR_LEN(entry.filename), 0); + str = entry.filename; } zend_hash_add_mem(&mydata->manifest, str, (void*)&entry, sizeof(phar_entry_info)); - zend_string_release(str); + if (mydata->is_persistent) { + zend_string_release(str); + } } snprintf(mydata->version, sizeof(mydata->version), "%u.%u.%u", manifest_ver >> 12, (manifest_ver >> 8) & 0xF, (manifest_ver >> 4) & 0xF);