@@ -415,7 +415,7 @@ PHP_METHOD(Phar, running)
415415 }
416416
417417 if (zend_string_starts_with_literal_ci (fname , "phar://" )) {
418- zend_string * arch = phar_split_fname (ZSTR_VAL (fname ), ZSTR_LEN (fname ), NULL , NULL , 2 , 0 );
418+ zend_string * arch = phar_split_fname (ZSTR_VAL (fname ), ZSTR_LEN (fname ), NULL , 2 , 0 );
419419 if (retphar ) {
420420 RETVAL_STRINGL (ZSTR_VAL (fname ), ZSTR_LEN (arch ) + 7 );
421421 zend_string_release_ex (arch , false);
@@ -436,8 +436,8 @@ PHP_METHOD(Phar, running)
436436 */
437437PHP_METHOD (Phar , mount )
438438{
439- char * fname , * entry = NULL , * path , * actual ;
440- size_t fname_len , entry_len ;
439+ char * fname , * path , * actual ;
440+ size_t fname_len ;
441441 size_t path_len , actual_len ;
442442 phar_archive_data * pphar ;
443443#ifdef PHP_WIN32
@@ -469,9 +469,8 @@ PHP_METHOD(Phar, mount)
469469#endif
470470
471471 zend_string * arch = NULL ;
472- if (fname_len > 7 && !memcmp (fname , "phar://" , 7 ) && (arch = phar_split_fname (fname , fname_len , NULL , NULL , 2 , 0 ))) {
473- entry = NULL ;
474-
472+ zend_string * entry = NULL ;
473+ if (fname_len > 7 && !memcmp (fname , "phar://" , 7 ) && (arch = phar_split_fname (fname , fname_len , NULL , 2 , 0 ))) {
475474 if (path_len > 7 && !memcmp (path , "phar://" , 7 )) {
476475 zend_throw_exception_ex (phar_ce_PharException , 0 , "Can only mount internal paths within a phar archive, use a relative path instead of \"%s\"" , path );
477476 zend_string_release_ex (arch , false);
@@ -495,8 +494,8 @@ PHP_METHOD(Phar, mount)
495494 zend_throw_exception_ex (phar_ce_PharException , 0 , "Mounting of %s to %s within phar %s failed" , path , actual , ZSTR_VAL (arch ));
496495 }
497496
498- if (entry && path == entry ) {
499- efree (entry );
497+ if (entry && path == ZSTR_VAL ( entry ) ) {
498+ zend_string_release_ex (entry , false );
500499 }
501500
502501 if (arch ) {
@@ -512,9 +511,9 @@ PHP_METHOD(Phar, mount)
512511 }
513512
514513 goto carry_on ;
515- } else if (NULL != (arch = phar_split_fname (path , path_len , & entry , & entry_len , 2 , 0 ))) {
516- path = entry ;
517- path_len = entry_len ;
514+ } else if (NULL != (arch = phar_split_fname (path , path_len , & entry , 2 , 0 ))) {
515+ path = ZSTR_VAL ( entry ) ;
516+ path_len = ZSTR_LEN ( entry ) ;
518517 goto carry_on2 ;
519518 }
520519
@@ -1068,9 +1067,8 @@ static const spl_other_handler phar_spl_foreign_handler = {
10681067 */
10691068PHP_METHOD (Phar , __construct )
10701069{
1071- char * fname , * alias = NULL , * error , * entry = NULL , * save_fname ;
1070+ char * fname , * alias = NULL , * error , * save_fname ;
10721071 size_t fname_len , alias_len = 0 ;
1073- size_t entry_len ;
10741072 bool is_data ;
10751073 zend_long flags = SPL_FILE_DIR_SKIPDOTS |SPL_FILE_DIR_UNIXPATHS ;
10761074 zend_long format = 0 ;
@@ -1101,7 +1099,8 @@ PHP_METHOD(Phar, __construct)
11011099#ifdef PHP_WIN32
11021100 phar_unixify_path_separators (fname , fname_len );
11031101#endif
1104- zend_string * arch = phar_split_fname (fname , fname_len , & entry , & entry_len , !is_data , 2 );
1102+ zend_string * entry = NULL ;
1103+ zend_string * arch = phar_split_fname (fname , fname_len , & entry , !is_data , 2 );
11051104 if (arch ) {
11061105 /* use arch (the basename for the archive) for fname instead of fname */
11071106 /* this allows support for RecursiveDirectoryIterator of subdirectories */
@@ -1117,7 +1116,7 @@ PHP_METHOD(Phar, __construct)
11171116 }
11181117
11191118 if (entry ) {
1120- efree (entry );
1119+ zend_string_release_ex (entry , false );
11211120 }
11221121
11231122 if (error ) {
@@ -1150,7 +1149,7 @@ PHP_METHOD(Phar, __construct)
11501149 zend_throw_exception_ex (spl_ce_UnexpectedValueException , 0 ,
11511150 "Phar class can only be used for executable tar and zip archives" );
11521151 }
1153- efree (entry );
1152+ zend_string_release_ex (entry , false );
11541153 RETURN_THROWS ();
11551154 }
11561155
@@ -1168,9 +1167,9 @@ PHP_METHOD(Phar, __construct)
11681167 file_name_for_recursive_director_iterator_constructor = zend_string_concat3 (
11691168 ZEND_STRL ("phar://" ),
11701169 phar_data -> fname , phar_data -> fname_len ,
1171- entry , entry_len
1170+ ZSTR_VAL ( entry ), ZSTR_LEN ( entry )
11721171 );
1173- efree (entry );
1172+ zend_string_release_ex (entry , false );
11741173 } else {
11751174 file_name_for_recursive_director_iterator_constructor = zend_string_concat2 (
11761175 ZEND_STRL ("phar://" ),
@@ -1269,7 +1268,7 @@ PHP_METHOD(Phar, unlinkArchive)
12691268
12701269 const zend_string * zend_file_name = zend_get_executed_filename_ex ();
12711270 if (zend_file_name && zend_string_starts_with_literal_ci (zend_file_name , "phar://" )) {
1272- zend_string * arch = phar_split_fname (ZSTR_VAL (zend_file_name ), ZSTR_LEN (zend_file_name ), NULL , NULL , 2 , 0 );
1271+ zend_string * arch = phar_split_fname (ZSTR_VAL (zend_file_name ), ZSTR_LEN (zend_file_name ), NULL , 2 , 0 );
12731272 if (arch ) {
12741273 if (ZSTR_LEN (arch ) == fname_len && !memcmp (ZSTR_VAL (arch ), fname , ZSTR_LEN (arch ))) {
12751274 zend_string_release_ex (arch , false);
@@ -4373,9 +4372,8 @@ PHP_METHOD(Phar, extractTo)
43734372/* {{{ Construct a Phar entry object */
43744373PHP_METHOD (PharFileInfo , __construct )
43754374{
4376- char * fname , * entry , * error ;
4375+ char * fname , * error ;
43774376 size_t fname_len ;
4378- size_t entry_len ;
43794377 phar_entry_object * entry_obj ;
43804378 phar_entry_info * entry_info ;
43814379 phar_archive_data * phar_data ;
@@ -4398,7 +4396,8 @@ PHP_METHOD(PharFileInfo, __construct)
43984396 RETURN_THROWS ();
43994397 }
44004398
4401- zend_string * arch = phar_split_fname (fname , fname_len , & entry , & entry_len , 2 , 0 );
4399+ zend_string * entry = NULL ;
4400+ zend_string * arch = phar_split_fname (fname , fname_len , & entry , 2 , 0 );
44024401 if (!arch ) {
44034402 zend_throw_exception_ex (spl_ce_RuntimeException , 0 ,
44044403 "'%s' is not a valid phar archive URL (must have at least phar://filename.phar)" , fname );
@@ -4407,7 +4406,7 @@ PHP_METHOD(PharFileInfo, __construct)
44074406
44084407 if (phar_open_from_filename (ZSTR_VAL (arch ), ZSTR_LEN (arch ), NULL , 0 , REPORT_ERRORS , & phar_data , & error ) == FAILURE ) {
44094408 zend_string_release_ex (arch , false);
4410- efree (entry );
4409+ zend_string_release_ex (entry , false );
44114410 if (error ) {
44124411 zend_throw_exception_ex (spl_ce_RuntimeException , 0 ,
44134412 "Cannot open phar file '%s': %s" , fname , error );
@@ -4419,16 +4418,16 @@ PHP_METHOD(PharFileInfo, __construct)
44194418 RETURN_THROWS ();
44204419 }
44214420
4422- if ((entry_info = phar_get_entry_info_dir (phar_data , entry , entry_len , 1 , & error , true)) == NULL ) {
4421+ if ((entry_info = phar_get_entry_info_dir (phar_data , ZSTR_VAL ( entry ), ZSTR_LEN ( entry ) , 1 , & error , true)) == NULL ) {
44234422 zend_throw_exception_ex (spl_ce_RuntimeException , 0 ,
4424- "Cannot access phar file entry '%s' in archive '%s'%s%s" , entry , ZSTR_VAL (arch ), error ? ", " : "" , error ? error : "" );
4423+ "Cannot access phar file entry '%s' in archive '%s'%s%s" , ZSTR_VAL ( entry ) , ZSTR_VAL (arch ), error ? ", " : "" , error ? error : "" );
44254424 zend_string_release_ex (arch , false);
4426- efree (entry );
4425+ zend_string_release_ex (entry , false );
44274426 RETURN_THROWS ();
44284427 }
44294428
44304429 zend_string_release_ex (arch , false);
4431- efree (entry );
4430+ zend_string_release_ex (entry , false );
44324431
44334432 entry_obj -> entry = entry_info ;
44344433 if (!entry_info -> is_persistent && !entry_info -> is_temp_dir ) {
0 commit comments