@@ -1179,20 +1179,29 @@ PHP_METHOD(Phar, __construct)
11791179 phar_obj -> archive = phar_data ;
11801180 phar_obj -> spl .oth_handler = & phar_spl_foreign_handler ;
11811181
1182+ zend_string * file_name_for_recursive_director_iterator_constructor ;
11821183 if (entry ) {
1183- fname_len = spprintf (& fname , 0 , "phar://%s%s" , phar_data -> fname , entry );
1184+ file_name_for_recursive_director_iterator_constructor = zend_string_concat3 (
1185+ ZEND_STRL ("phar://" ),
1186+ phar_data -> fname , phar_data -> fname_len ,
1187+ entry , entry_len
1188+ );
11841189 efree (entry );
11851190 } else {
1186- fname_len = spprintf (& fname , 0 , "phar://%s" , phar_data -> fname );
1191+ file_name_for_recursive_director_iterator_constructor = zend_string_concat2 (
1192+ ZEND_STRL ("phar://" ),
1193+ phar_data -> fname , phar_data -> fname_len
1194+ );
11871195 }
11881196
1189- ZVAL_STRINGL (& arg1 , fname , fname_len );
1197+ ZVAL_STR (& arg1 , file_name_for_recursive_director_iterator_constructor );
11901198 ZVAL_LONG (& arg2 , flags );
11911199
11921200 zend_call_known_instance_method_with_2_params (spl_ce_RecursiveDirectoryIterator -> constructor ,
11931201 Z_OBJ_P (ZEND_THIS ), NULL , & arg1 , & arg2 );
11941202
1195- zval_ptr_dtor (& arg1 );
1203+ /* Freeing arg1 */
1204+ zend_string_release_ex (file_name_for_recursive_director_iterator_constructor , false);
11961205
11971206 if (!phar_data -> is_persistent ) {
11981207 phar_obj -> archive -> is_data = is_data ;
@@ -1202,7 +1211,6 @@ PHP_METHOD(Phar, __construct)
12021211 }
12031212
12041213 phar_obj -> spl .info_class = phar_ce_entry ;
1205- efree (fname );
12061214}
12071215/* }}} */
12081216
0 commit comments