Commit 3a9d7b53e05 for php.net

commit 3a9d7b53e05ccf456ef917b1cd9a3fc36bd3d380
Author: Gina Peter Banyard <girgias@php.net>
Date:   Thu Apr 23 20:27:33 2026 +0100

    ext/phar: refactor logic after expand_filepath() call in phar_get_archive()

    We don't need to be assigning the realpath to fname, we can just use it directly.
    This also makes the efree(my_realpath) call not seem completely random.

diff --git a/ext/phar/util.c b/ext/phar/util.c
index 41f9fce546e..48ef45c9b72 100644
--- a/ext/phar/util.c
+++ b/ext/phar/util.c
@@ -963,7 +963,6 @@ zend_result phar_free_alias(const phar_archive_data *phar) /* {{{ */
 zend_result phar_get_archive(phar_archive_data **archive, const char *fname, size_t fname_len, const char *alias, size_t alias_len, char **error) /* {{{ */
 {
 	phar_archive_data *fd, *fd_ptr;
-	char *my_realpath;

 	phar_request_initialize();

@@ -1036,7 +1035,6 @@ zend_result phar_get_archive(phar_archive_data **archive, const char *fname, siz
 		}
 	}

-	my_realpath = NULL;
 	const char *save = fname;
 	size_t save_len = fname_len;

@@ -1116,25 +1114,24 @@ zend_result phar_get_archive(phar_archive_data **archive, const char *fname, siz
 		}

 		/* not found, try converting \ to / */
-		my_realpath = expand_filepath(fname, my_realpath);
+		char *my_realpath = expand_filepath(fname, NULL);

-		if (my_realpath) {
-			size_t my_realpath_len = strlen(my_realpath);
-#ifdef PHP_WIN32
-			phar_unixify_path_separators(my_realpath, my_realpath_len);
-#endif
-			fname_len = my_realpath_len;
-			fname = my_realpath;
-		} else {
+		if (UNEXPECTED(!my_realpath)) {
 			return FAILURE;
 		}

-		fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_fname_map)), fname, fname_len);
+		size_t my_realpath_len = strlen(my_realpath);
+#ifdef PHP_WIN32
+		phar_unixify_path_separators(my_realpath, my_realpath_len);
+#endif
+
+		fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_fname_map)), my_realpath, my_realpath_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);
+			fd_ptr = zend_hash_str_find_ptr(&cached_phars, my_realpath, my_realpath_len);
 		}
+		efree(my_realpath);

 		if (fd_ptr) {
 			*archive = fd_ptr;
@@ -1144,8 +1141,6 @@ zend_result phar_get_archive(phar_archive_data **archive, const char *fname, siz
 				zend_hash_str_add_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len, fd);
 			}

-			efree(my_realpath);
-
 			PHAR_G(last_phar) = fd;
 			PHAR_G(last_phar_name) = fd->fname;
 			PHAR_G(last_alias) = fd->alias;
@@ -1153,8 +1148,6 @@ zend_result phar_get_archive(phar_archive_data **archive, const char *fname, siz

 			return SUCCESS;
 		}
-
-		efree(my_realpath);
 	}

 	return FAILURE;