Skip to content

Commit 530276a

Browse files
committed
ext/phar: reorganize if statements to remove gotos in phar_get_archive()
And have a linear code flow that is easier to reason
1 parent 7d166a2 commit 530276a

1 file changed

Lines changed: 19 additions & 17 deletions

File tree

ext/phar/util.c

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)