Commit 3948dbe4729 for php.net
commit 3948dbe4729a59649cb5b793594fd62fc01e4dcb
Author: Gina Peter Banyard <girgias@php.net>
Date: Tue Apr 14 19:06:12 2026 +0100
ext/phar: use zend_string* and concat API for constructor argument
diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c
index 5aeedbfcbdd..f522d52ba6c 100644
--- a/ext/phar/phar_object.c
+++ b/ext/phar/phar_object.c
@@ -1179,20 +1179,29 @@ PHP_METHOD(Phar, __construct)
phar_obj->archive = phar_data;
phar_obj->spl.oth_handler = &phar_spl_foreign_handler;
+ zend_string *file_name_for_recursive_director_iterator_constructor;
if (entry) {
- fname_len = spprintf(&fname, 0, "phar://%s%s", phar_data->fname, entry);
+ file_name_for_recursive_director_iterator_constructor = zend_string_concat3(
+ ZEND_STRL("phar://"),
+ phar_data->fname, phar_data->fname_len,
+ entry, entry_len
+ );
efree(entry);
} else {
- fname_len = spprintf(&fname, 0, "phar://%s", phar_data->fname);
+ file_name_for_recursive_director_iterator_constructor = zend_string_concat2(
+ ZEND_STRL("phar://"),
+ phar_data->fname, phar_data->fname_len
+ );
}
- ZVAL_STRINGL(&arg1, fname, fname_len);
+ ZVAL_STR(&arg1, file_name_for_recursive_director_iterator_constructor);
ZVAL_LONG(&arg2, flags);
zend_call_known_instance_method_with_2_params(spl_ce_RecursiveDirectoryIterator->constructor,
Z_OBJ_P(ZEND_THIS), NULL, &arg1, &arg2);
- zval_ptr_dtor(&arg1);
+ /* Freeing arg1 */
+ zend_string_release_ex(file_name_for_recursive_director_iterator_constructor, false);
if (!phar_data->is_persistent) {
phar_obj->archive->is_data = is_data;
@@ -1202,7 +1211,6 @@ PHP_METHOD(Phar, __construct)
}
phar_obj->spl.info_class = phar_ce_entry;
- efree(fname);
}
/* }}} */