Skip to content

Commit 131f98a

Browse files
committed
ext/phar: use zend_string* and concat API for constructor argument
1 parent ce5af02 commit 131f98a

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

ext/phar/phar_object.c

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1162,20 +1162,29 @@ PHP_METHOD(Phar, __construct)
11621162
phar_obj->archive = phar_data;
11631163
phar_obj->spl.oth_handler = &phar_spl_foreign_handler;
11641164

1165+
zend_string *file_name_for_recursive_director_iterator_constructor;
11651166
if (entry) {
1166-
fname_len = spprintf(&fname, 0, "phar://%s%s", phar_data->fname, ZSTR_VAL(entry));
1167+
file_name_for_recursive_director_iterator_constructor = zend_string_concat3(
1168+
ZEND_STRL("phar://"),
1169+
phar_data->fname, phar_data->fname_len,
1170+
ZSTR_VAL(entry), ZSTR_LEN(entry)
1171+
);
11671172
zend_string_release_ex(entry, false);
11681173
} else {
1169-
fname_len = spprintf(&fname, 0, "phar://%s", phar_data->fname);
1174+
file_name_for_recursive_director_iterator_constructor = zend_string_concat2(
1175+
ZEND_STRL("phar://"),
1176+
phar_data->fname, phar_data->fname_len
1177+
);
11701178
}
11711179

1172-
ZVAL_STRINGL(&arg1, fname, fname_len);
1180+
ZVAL_STR(&arg1, file_name_for_recursive_director_iterator_constructor);
11731181
ZVAL_LONG(&arg2, flags);
11741182

11751183
zend_call_known_instance_method_with_2_params(spl_ce_RecursiveDirectoryIterator->constructor,
11761184
Z_OBJ_P(ZEND_THIS), NULL, &arg1, &arg2);
11771185

1178-
zval_ptr_dtor(&arg1);
1186+
/* Freeing arg1 */
1187+
zend_string_release_ex(file_name_for_recursive_director_iterator_constructor, false);
11791188

11801189
if (!phar_data->is_persistent) {
11811190
phar_obj->archive->is_data = is_data;
@@ -1185,7 +1194,6 @@ PHP_METHOD(Phar, __construct)
11851194
}
11861195

11871196
phar_obj->spl.info_class = phar_ce_entry;
1188-
efree(fname);
11891197
}
11901198
/* }}} */
11911199

0 commit comments

Comments
 (0)