Commit 530276ab3fc for php.net

commit 530276ab3fc6d34bf231d52d2a93ce55996e0550
Author: Gina Peter Banyard <girgias@php.net>
Date:   Thu Apr 23 20:12:31 2026 +0100

    ext/phar: reorganize if statements to remove gotos in phar_get_archive()

    And have a linear code flow that is easier to reason

diff --git a/ext/phar/util.c b/ext/phar/util.c
index efab7f9edab..41f9fce546e 100644
--- a/ext/phar/util.c
+++ b/ext/phar/util.c
@@ -997,16 +997,21 @@ zend_result phar_get_archive(phar_archive_data **archive, const char *fname, siz
 		return SUCCESS;
 	}

-	if (alias && alias_len && PHAR_G(last_phar) && alias_len == PHAR_G(last_alias_len) && !memcmp(alias, PHAR_G(last_alias), alias_len)) {
-		fd = PHAR_G(last_phar);
-		fd_ptr = fd;
-		goto alias_success;
-	}
-
 	if (alias && alias_len) {
-		fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len);
+		/* If the alias stored in the last_phar cache matches, just use it directly */
+		if (PHAR_G(last_phar) && alias_len == PHAR_G(last_alias_len) && !memcmp(alias, PHAR_G(last_alias), alias_len)) {
+			fd = PHAR_G(last_phar);
+			fd_ptr = fd;
+		} else {
+			fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len);
+		}
+
+		/* If we didn't find the alias, check in the cached manifest to see if we can find it */
+		if (!fd_ptr && PHAR_G(manifest_cached)) {
+			fd_ptr = zend_hash_str_find_ptr(&cached_alias, alias, alias_len);
+		}
+
 		if (fd_ptr) {
-alias_success:
 			if (!zend_string_equals_cstr(fd_ptr->fname, fname, fname_len)) {
 				if (error) {
 					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

 			return SUCCESS;
 		}
-
-		if (PHAR_G(manifest_cached) && NULL != (fd_ptr = zend_hash_str_find_ptr(&cached_alias, alias, alias_len))) {
-			goto alias_success;
-		}
 	}

 	my_realpath = NULL;
@@ -1129,8 +1130,13 @@ zend_result phar_get_archive(phar_archive_data **archive, const char *fname, siz
 		}

 		fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_fname_map)), fname, fname_len);
+
+		/* If we didn't find the path in the fname map, check in the cached manifest to see if we can find it */
+		if (!fd_ptr && PHAR_G(manifest_cached)) {
+			fd_ptr = zend_hash_str_find_ptr(&cached_phars, fname, fname_len);
+		}
+
 		if (fd_ptr) {
-realpath_success:
 			*archive = fd_ptr;
 			fd = fd_ptr;

@@ -1148,10 +1154,6 @@ zend_result phar_get_archive(phar_archive_data **archive, const char *fname, siz
 			return SUCCESS;
 		}

-		if (PHAR_G(manifest_cached) && NULL != (fd_ptr = zend_hash_str_find_ptr(&cached_phars, fname, fname_len))) {
-			goto realpath_success;
-		}
-
 		efree(my_realpath);
 	}