@@ -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
@@ -1164,8 +1163,8 @@ PHP_METHOD(Phar, __construct)
11641163 phar_obj -> spl .oth_handler = & phar_spl_foreign_handler ;
11651164
11661165 if (entry ) {
1167- fname_len = spprintf (& fname , 0 , "phar://%s%s" , phar_data -> fname , entry );
1168- efree (entry );
1166+ fname_len = spprintf (& fname , 0 , "phar://%s%s" , phar_data -> fname , ZSTR_VAL ( entry ) );
1167+ zend_string_release_ex (entry , false );
11691168 } else {
11701169 fname_len = spprintf (& fname , 0 , "phar://%s" , phar_data -> fname );
11711170 }
@@ -1261,7 +1260,7 @@ PHP_METHOD(Phar, unlinkArchive)
12611260
12621261 const zend_string * zend_file_name = zend_get_executed_filename_ex ();
12631262 if (zend_file_name && zend_string_starts_with_literal_ci (zend_file_name , "phar://" )) {
1264- zend_string * arch = phar_split_fname (ZSTR_VAL (zend_file_name ), ZSTR_LEN (zend_file_name ), NULL , NULL , 2 , 0 );
1263+ zend_string * arch = phar_split_fname (ZSTR_VAL (zend_file_name ), ZSTR_LEN (zend_file_name ), NULL , 2 , 0 );
12651264 if (arch ) {
12661265 if (ZSTR_LEN (arch ) == fname_len && !memcmp (ZSTR_VAL (arch ), fname , ZSTR_LEN (arch ))) {
12671266 zend_string_release_ex (arch , false);
@@ -4365,9 +4364,8 @@ PHP_METHOD(Phar, extractTo)
43654364/* {{{ Construct a Phar entry object */
43664365PHP_METHOD (PharFileInfo , __construct )
43674366{
4368- char * fname , * entry , * error ;
4367+ char * fname , * error ;
43694368 size_t fname_len ;
4370- size_t entry_len ;
43714369 phar_entry_object * entry_obj ;
43724370 phar_entry_info * entry_info ;
43734371 phar_archive_data * phar_data ;
@@ -4390,7 +4388,8 @@ PHP_METHOD(PharFileInfo, __construct)
43904388 RETURN_THROWS ();
43914389 }
43924390
4393- zend_string * arch = phar_split_fname (fname , fname_len , & entry , & entry_len , 2 , 0 );
4391+ zend_string * entry = NULL ;
4392+ zend_string * arch = phar_split_fname (fname , fname_len , & entry , 2 , 0 );
43944393 if (!arch ) {
43954394 zend_throw_exception_ex (spl_ce_RuntimeException , 0 ,
43964395 "'%s' is not a valid phar archive URL (must have at least phar://filename.phar)" , fname );
@@ -4399,7 +4398,7 @@ PHP_METHOD(PharFileInfo, __construct)
43994398
44004399 if (phar_open_from_filename (ZSTR_VAL (arch ), ZSTR_LEN (arch ), NULL , 0 , REPORT_ERRORS , & phar_data , & error ) == FAILURE ) {
44014400 zend_string_release_ex (arch , false);
4402- efree (entry );
4401+ zend_string_release_ex (entry , false );
44034402 if (error ) {
44044403 zend_throw_exception_ex (spl_ce_RuntimeException , 0 ,
44054404 "Cannot open phar file '%s': %s" , fname , error );
@@ -4411,16 +4410,16 @@ PHP_METHOD(PharFileInfo, __construct)
44114410 RETURN_THROWS ();
44124411 }
44134412
4414- if ((entry_info = phar_get_entry_info_dir (phar_data , entry , entry_len , 1 , & error , true)) == NULL ) {
4413+ if ((entry_info = phar_get_entry_info_dir (phar_data , ZSTR_VAL ( entry ), ZSTR_LEN ( entry ) , 1 , & error , true)) == NULL ) {
44154414 zend_throw_exception_ex (spl_ce_RuntimeException , 0 ,
4416- "Cannot access phar file entry '%s' in archive '%s'%s%s" , entry , ZSTR_VAL (arch ), error ? ", " : "" , error ? error : "" );
4415+ "Cannot access phar file entry '%s' in archive '%s'%s%s" , ZSTR_VAL ( entry ) , ZSTR_VAL (arch ), error ? ", " : "" , error ? error : "" );
44174416 zend_string_release_ex (arch , false);
4418- efree (entry );
4417+ zend_string_release_ex (entry , false );
44194418 RETURN_THROWS ();
44204419 }
44214420
44224421 zend_string_release_ex (arch , false);
4423- efree (entry );
4422+ zend_string_release_ex (entry , false );
44244423
44254424 entry_obj -> entry = entry_info ;
44264425 if (!entry_info -> is_persistent && !entry_info -> is_temp_dir ) {
0 commit comments