@@ -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