@@ -997,16 +997,21 @@ zend_result phar_get_archive(phar_archive_data **archive, const char *fname, siz
997997 return SUCCESS ;
998998 }
999999
1000- if (alias && alias_len && PHAR_G (last_phar ) && alias_len == PHAR_G (last_alias_len ) && !memcmp (alias , PHAR_G (last_alias ), alias_len )) {
1001- fd = PHAR_G (last_phar );
1002- fd_ptr = fd ;
1003- goto alias_success ;
1004- }
1005-
10061000 if (alias && alias_len ) {
1007- fd_ptr = zend_hash_str_find_ptr (& (PHAR_G (phar_alias_map )), alias , alias_len );
1001+ /* If the alias stored in the last_phar cache matches, just use it directly */
1002+ if (PHAR_G (last_phar ) && alias_len == PHAR_G (last_alias_len ) && !memcmp (alias , PHAR_G (last_alias ), alias_len )) {
1003+ fd = PHAR_G (last_phar );
1004+ fd_ptr = fd ;
1005+ } else {
1006+ fd_ptr = zend_hash_str_find_ptr (& (PHAR_G (phar_alias_map )), alias , alias_len );
1007+ }
1008+
1009+ /* If we didn't find the alias, check in the cached manifest to see if we can find it */
1010+ if (!fd_ptr && PHAR_G (manifest_cached )) {
1011+ fd_ptr = zend_hash_str_find_ptr (& cached_alias , alias , alias_len );
1012+ }
1013+
10081014 if (fd_ptr ) {
1009- alias_success :
10101015 if (!zend_string_equals_cstr (fd_ptr -> fname , fname , fname_len )) {
10111016 if (error ) {
10121017 spprintf (error , 0 , "alias \"%s\" is already used for archive \"%s\" cannot be overloaded with \"%s\"" , alias , ZSTR_VAL (fd_ptr -> fname ), fname );
@@ -1029,10 +1034,6 @@ zend_result phar_get_archive(phar_archive_data **archive, const char *fname, siz
10291034
10301035 return SUCCESS ;
10311036 }
1032-
1033- if (PHAR_G (manifest_cached ) && NULL != (fd_ptr = zend_hash_str_find_ptr (& cached_alias , alias , alias_len ))) {
1034- goto alias_success ;
1035- }
10361037 }
10371038
10381039 my_realpath = NULL ;
@@ -1129,8 +1130,13 @@ zend_result phar_get_archive(phar_archive_data **archive, const char *fname, siz
11291130 }
11301131
11311132 fd_ptr = zend_hash_str_find_ptr (& (PHAR_G (phar_fname_map )), fname , fname_len );
1133+
1134+ /* If we didn't find the path in the fname map, check in the cached manifest to see if we can find it */
1135+ if (!fd_ptr && PHAR_G (manifest_cached )) {
1136+ fd_ptr = zend_hash_str_find_ptr (& cached_phars , fname , fname_len );
1137+ }
1138+
11321139 if (fd_ptr ) {
1133- realpath_success :
11341140 * archive = fd_ptr ;
11351141 fd = fd_ptr ;
11361142
@@ -1148,10 +1154,6 @@ zend_result phar_get_archive(phar_archive_data **archive, const char *fname, siz
11481154 return SUCCESS ;
11491155 }
11501156
1151- if (PHAR_G (manifest_cached ) && NULL != (fd_ptr = zend_hash_str_find_ptr (& cached_phars , fname , fname_len ))) {
1152- goto realpath_success ;
1153- }
1154-
11551157 efree (my_realpath );
11561158 }
11571159
0 commit comments