Commit 03668996156 for php.net

commit 036689961566f82f6d2e5bc517ab3d8693efbeca
Author: Gina Peter Banyard <girgias@php.net>
Date:   Wed Apr 29 09:03:36 2026 +0100

    ext/phar: refactor phar_get_archive() to return phar_archive_data* (#21858)

    Instead of using an out param.

diff --git a/ext/phar/dirstream.c b/ext/phar/dirstream.c
index 4bef14dfe6a..2b74a566411 100644
--- a/ext/phar/dirstream.c
+++ b/ext/phar/dirstream.c
@@ -248,7 +248,6 @@ static php_stream *phar_make_dirstream(const char *dir, size_t dirlen, const Has
 php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC) /* {{{ */
 {
 	char *error;
-	phar_archive_data *phar;

 	php_url *resource = phar_parse_url(wrapper, path, mode, options);
 	if (!resource) {
@@ -276,7 +275,8 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path,

 	phar_request_initialize();

-	if (FAILURE == phar_get_archive(&phar, ZSTR_VAL(resource->host), ZSTR_LEN(resource->host), NULL, 0, &error)) {
+	const phar_archive_data *phar = phar_get_archive(ZSTR_VAL(resource->host), ZSTR_LEN(resource->host), NULL, 0, &error);
+	if (!phar) {
 		if (error) {
 			php_stream_wrapper_log_error(wrapper, options, "%s", error);
 			efree(error);
@@ -340,7 +340,6 @@ php_stream *phar_wrapper_open_dir(php_stream_wrapper *wrapper, const char *path,
 int phar_wrapper_mkdir(php_stream_wrapper *wrapper, const char *url_from, int mode, int options, php_stream_context *context) /* {{{ */
 {
 	phar_entry_info entry;
-	phar_archive_data *phar = NULL;
 	char *error;
 	php_url *resource = NULL;

@@ -351,9 +350,7 @@ int phar_wrapper_mkdir(php_stream_wrapper *wrapper, const char *url_from, int mo
 		return 0;
 	}

-	if (FAILURE == phar_get_archive(&phar, ZSTR_VAL(arch), ZSTR_LEN(arch), NULL, 0, NULL)) {
-		phar = NULL;
-	}
+	phar_archive_data *phar = phar_get_archive(ZSTR_VAL(arch), ZSTR_LEN(arch), NULL, 0, NULL);

 	zend_string_release_ex(arch, false);

@@ -379,7 +376,8 @@ int phar_wrapper_mkdir(php_stream_wrapper *wrapper, const char *url_from, int mo
 		return 0;
 	}

-	if (FAILURE == phar_get_archive(&phar, ZSTR_VAL(resource->host), ZSTR_LEN(resource->host), NULL, 0, &error)) {
+	phar = phar_get_archive(ZSTR_VAL(resource->host), ZSTR_LEN(resource->host), NULL, 0, &error);
+	if (!phar) {
 		php_stream_wrapper_log_error(wrapper, options, "phar error: cannot create directory \"%s\" in phar \"%s\", error retrieving phar information: %s", ZSTR_VAL(resource->path) + 1, ZSTR_VAL(resource->host), error);
 		efree(error);
 		php_url_free(resource);
@@ -467,7 +465,6 @@ int phar_wrapper_mkdir(php_stream_wrapper *wrapper, const char *url_from, int mo
  */
 int phar_wrapper_rmdir(php_stream_wrapper *wrapper, const char *url, int options, php_stream_context *context) /* {{{ */
 {
-	phar_archive_data *phar = NULL;
 	char *error;

 	/* pre-readonly check, we need to know if this is a data phar */
@@ -477,9 +474,7 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, const char *url, int options
 		return 0;
 	}

-	if (FAILURE == phar_get_archive(&phar, ZSTR_VAL(arch), ZSTR_LEN(arch), NULL, 0, NULL)) {
-		phar = NULL;
-	}
+	phar_archive_data *phar = phar_get_archive(ZSTR_VAL(arch), ZSTR_LEN(arch), NULL, 0, NULL);

 	zend_string_release_ex(arch, false);

@@ -506,7 +501,8 @@ int phar_wrapper_rmdir(php_stream_wrapper *wrapper, const char *url, int options
 		return 0;
 	}

-	if (FAILURE == phar_get_archive(&phar, ZSTR_VAL(resource->host), ZSTR_LEN(resource->host), NULL, 0, &error)) {
+	phar = phar_get_archive(ZSTR_VAL(resource->host), ZSTR_LEN(resource->host), NULL, 0, &error);
+	if (!phar) {
 		php_stream_wrapper_log_error(wrapper, options, "phar error: cannot remove directory \"%s\" in phar \"%s\", error retrieving phar information: %s", ZSTR_VAL(resource->path)+1, ZSTR_VAL(resource->host), error);
 		efree(error);
 		php_url_free(resource);
diff --git a/ext/phar/func_interceptors.c b/ext/phar/func_interceptors.c
index 61bb9050550..e2b45ac2a0a 100644
--- a/ext/phar/func_interceptors.c
+++ b/ext/phar/func_interceptors.c
@@ -98,8 +98,8 @@ static zend_string* phar_get_name_for_relative_paths(zend_string *filename, bool

 	/* fopen within phar, if :// is not in the url, then prepend phar://<archive>/ */
 	/* retrieving a file defaults to within the current directory, so use this if possible */
-	phar_archive_data *phar;
-	if (FAILURE == phar_get_archive(&phar, ZSTR_VAL(arch), ZSTR_LEN(arch), NULL, 0, NULL)) {
+	phar_archive_data *phar = phar_get_archive(ZSTR_VAL(arch), ZSTR_LEN(arch), NULL, 0, NULL);
+	if (!phar) {
 		zend_string_release_ex(arch, false);
 		return NULL;
 	}
@@ -492,9 +492,9 @@ static void phar_file_stat(const char *filename, size_t filename_length, int typ
 		zend_string *arch = phar_split_fname(ZSTR_VAL(fname), ZSTR_LEN(fname), NULL, 2, 0);
 		if (arch) {
 			/* fopen within phar, if :// is not in the url, then prepend phar://<archive>/ */
-			zend_result has_archive = phar_get_archive(&phar, ZSTR_VAL(arch), ZSTR_LEN(arch), NULL, 0, NULL);
+			phar = phar_get_archive(ZSTR_VAL(arch), ZSTR_LEN(arch), NULL, 0, NULL);
 			zend_string_release_ex(arch, false);
-			if (FAILURE == has_archive) {
+			if (!phar) {
 				goto skip_phar;
 			}
 splitted:;
@@ -727,13 +727,13 @@ PHP_FUNCTION(phar_is_file) /* {{{ */

 		zend_string *arch = phar_split_fname(ZSTR_VAL(fname), ZSTR_LEN(fname), NULL, 2, 0);
 		if (arch) {
-			phar_archive_data *phar;
+			;

 			/* fopen within phar, if :// is not in the url, then prepend phar://<archive>/ */
 			/* retrieving a file within the current directory, so use this if possible */
-			zend_result has_archive = phar_get_archive(&phar, ZSTR_VAL(arch), ZSTR_LEN(arch), NULL, 0, NULL);
+			phar_archive_data *phar = phar_get_archive(ZSTR_VAL(arch), ZSTR_LEN(arch), NULL, 0, NULL);
 			zend_string_release_ex(arch, false);
-			if (has_archive == SUCCESS) {
+			if (phar) {
 				phar_entry_info *etemp;

 				zend_string *entry = phar_fix_filepath(filename, filename_len, true);
@@ -784,13 +784,11 @@ PHP_FUNCTION(phar_is_link) /* {{{ */

 		zend_string *arch = phar_split_fname(ZSTR_VAL(fname), ZSTR_LEN(fname), NULL, 2, 0);
 		if (arch) {
-			phar_archive_data *phar;
-
 			/* fopen within phar, if :// is not in the url, then prepend phar://<archive>/ */
 			/* retrieving a file within the current directory, so use this if possible */
-			zend_result has_archive = phar_get_archive(&phar, ZSTR_VAL(arch), ZSTR_LEN(arch), NULL, 0, NULL);
+			phar_archive_data *phar = phar_get_archive(ZSTR_VAL(arch), ZSTR_LEN(arch), NULL, 0, NULL);
 			zend_string_release_ex(arch, false);
-			if (has_archive == SUCCESS) {
+			if (phar) {
 				phar_entry_info *etemp;

 				zend_string *entry = phar_fix_filepath(filename, filename_len, true);
diff --git a/ext/phar/phar.c b/ext/phar/phar.c
index a81a62a188f..6d9dd532494 100644
--- a/ext/phar/phar.c
+++ b/ext/phar/phar.c
@@ -486,7 +486,6 @@ ZEND_ATTRIBUTE_NONNULL void phar_entry_remove(phar_entry_data *idata, char **err
  */
 static zend_result phar_open_parsed_phar(char *fname, size_t fname_len, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error) /* {{{ */
 {
-	phar_archive_data *phar;
 #ifdef PHP_WIN32
 	char *save_fname;
 	ALLOCA_FLAG(fname_use_heap)
@@ -504,12 +503,12 @@ static zend_result phar_open_parsed_phar(char *fname, size_t fname_len, char *al
 		phar_unixify_path_separators(fname, fname_len);
 	}
 #endif
-	zend_result archive_retrieved = phar_get_archive(&phar, fname, fname_len, alias, alias_len, error);
+	phar_archive_data *phar = phar_get_archive(fname, fname_len, alias, alias_len, error);
 	/* logic is as follows:
 	   - If no alias was passed in, then it can match either and be valid
 	   - If an explicit alias was requested, ensure the filename passed in matches the phar's filename.
 	 */
-	bool process_phar = SUCCESS == archive_retrieved && (!alias || zend_string_equals_cstr(phar->fname, fname, fname_len));
+	bool process_phar = phar && (!alias || zend_string_equals_cstr(phar->fname, fname, fname_len));
 #ifdef PHP_WIN32
 	if (fname != save_fname) {
 		free_alloca(fname, fname_use_heap);
diff --git a/ext/phar/phar_internal.h b/ext/phar/phar_internal.h
index 8206856f6ca..b45fb2d2a13 100644
--- a/ext/phar/phar_internal.h
+++ b/ext/phar/phar_internal.h
@@ -411,7 +411,7 @@ ZEND_ATTRIBUTE_NONNULL_ARGS(1, 6, 7) zend_result phar_open_or_create_filename(ze
 ZEND_ATTRIBUTE_NONNULL_ARGS(1, 6, 7) zend_result phar_create_or_parse_filename(zend_string *fname, char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error);
 ZEND_ATTRIBUTE_NONNULL_ARGS(3) zend_result phar_open_executed_filename(char *alias, size_t alias_len, char **error);
 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* phar_get_archive(const char *fname, size_t fname_len, const char *alias, size_t alias_len, char **error);
 zend_result phar_verify_signature(php_stream *fp, size_t end_of_phar, uint32_t sig_type, const char *sig, size_t sig_len, const char *fname, char **signature, size_t *signature_len, char **error);
 ZEND_ATTRIBUTE_NONNULL zend_string* phar_create_signature(phar_archive_data *phar, php_stream *fp, char **error);

diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c
index bc55c175f7b..1766d9f778e 100644
--- a/ext/phar/phar_object.c
+++ b/ext/phar/phar_object.c
@@ -752,8 +752,8 @@ PHP_METHOD(Phar, webPhar)
 			entry_len = sizeof("/index.php")-1;
 		}

-		if (FAILURE == phar_get_archive(&phar, fname, fname_len, NULL, 0, NULL) ||
-			(info = phar_get_entry_info(phar, entry, entry_len, NULL, false)) == NULL) {
+		phar = phar_get_archive(fname, fname_len, NULL, 0, NULL);
+		if (!phar || (info = phar_get_entry_info(phar, entry, entry_len, NULL, false)) == NULL) {
 			phar_do_404(phar, fname, fname_len, f404);
 		} else {
 			char *tmp = NULL, sa = '\0';
@@ -793,8 +793,8 @@ PHP_METHOD(Phar, webPhar)
 		goto cleanup_skip_entry;
 	}

-	if (FAILURE == phar_get_archive(&phar, fname, fname_len, NULL, 0, NULL) ||
-		(info = phar_get_entry_info(phar, entry, entry_len, NULL, false)) == NULL) {
+	phar = phar_get_archive(fname, fname_len, NULL, 0, NULL);
+	if (!phar || (info = phar_get_entry_info(phar, entry, entry_len, NULL, false)) == NULL) {
 		phar_do_404(phar, fname, fname_len, f404);
 		goto cleanup;
 	}
diff --git a/ext/phar/stream.c b/ext/phar/stream.c
index f49bc5e2deb..9d24fa64d75 100644
--- a/ext/phar/stream.c
+++ b/ext/phar/stream.c
@@ -230,7 +230,8 @@ static php_stream * phar_wrapper_open_url(php_stream_wrapper *wrapper, const cha
 	} else {
 		if (!*internal_file && (options & STREAM_OPEN_FOR_INCLUDE)) {
 			/* retrieve the stub */
-			if (FAILURE == phar_get_archive(&phar, ZSTR_VAL(resource->host), ZSTR_LEN(resource->host), NULL, 0, NULL)) {
+			phar = phar_get_archive(ZSTR_VAL(resource->host), ZSTR_LEN(resource->host), NULL, 0, NULL);
+			if (!phar) {
 				php_stream_wrapper_log_error(wrapper, options, "file %s is not a valid phar archive", ZSTR_VAL(resource->host));
 				efree(internal_file);
 				php_url_free(resource);
@@ -554,7 +555,6 @@ static int phar_wrapper_stat(php_stream_wrapper *wrapper, const char *url, int f
 				  php_stream_statbuf *ssb, php_stream_context *context) /* {{{ */
 {
 	char *internal_file;
-	phar_archive_data *phar;
 	size_t internal_file_len;

 	php_url *resource = phar_parse_url(wrapper, url, "r", flags|PHP_STREAM_URL_STAT_QUIET);
@@ -577,7 +577,8 @@ static int phar_wrapper_stat(php_stream_wrapper *wrapper, const char *url, int f

 	internal_file = ZSTR_VAL(resource->path) + 1; /* strip leading "/" */
 	/* find the phar in our trusty global hash indexed by alias (host of phar://blah.phar/file.whatever) */
-	if (FAILURE == phar_get_archive(&phar, ZSTR_VAL(resource->host), ZSTR_LEN(resource->host), NULL, 0, NULL)) {
+	phar_archive_data *phar = phar_get_archive(ZSTR_VAL(resource->host), ZSTR_LEN(resource->host), NULL, 0, NULL);
+	if (!phar) {
 		php_url_free(resource);
 		return FAILURE;
 	}
@@ -725,7 +726,6 @@ static int phar_wrapper_unlink(php_stream_wrapper *wrapper, const char *url, int
 static int phar_wrapper_rename(php_stream_wrapper *wrapper, const char *url_from, const char *url_to, int options, php_stream_context *context) /* {{{ */
 {
 	char *error;
-	phar_archive_data *phar, *pfrom, *pto;
 	bool is_dir = false;
 	bool is_modified = false;

@@ -736,9 +736,8 @@ static int phar_wrapper_rename(php_stream_wrapper *wrapper, const char *url_from
 		php_error_docref(NULL, E_WARNING, "phar error: cannot rename \"%s\" to \"%s\": invalid or non-writable url \"%s\"", url_from, url_to, url_from);
 		return 0;
 	}
-	if (SUCCESS != phar_get_archive(&pfrom, ZSTR_VAL(resource_from->host), ZSTR_LEN(resource_from->host), NULL, 0, NULL)) {
-		pfrom = NULL;
-	}
+
+	phar_archive_data *pfrom = phar_get_archive(ZSTR_VAL(resource_from->host), ZSTR_LEN(resource_from->host), NULL, 0, NULL);
 	if (PHAR_G(readonly) && (!pfrom || !pfrom->is_data)) {
 		php_url_free(resource_from);
 		php_error_docref(NULL, E_WARNING, "phar error: Write operations disabled by the php.ini setting phar.readonly");
@@ -751,9 +750,8 @@ static int phar_wrapper_rename(php_stream_wrapper *wrapper, const char *url_from
 		php_error_docref(NULL, E_WARNING, "phar error: cannot rename \"%s\" to \"%s\": invalid or non-writable url \"%s\"", url_from, url_to, url_to);
 		return 0;
 	}
-	if (SUCCESS != phar_get_archive(&pto, ZSTR_VAL(resource_to->host), ZSTR_LEN(resource_to->host), NULL, 0, NULL)) {
-		pto = NULL;
-	}
+
+	phar_archive_data *pto = phar_get_archive(ZSTR_VAL(resource_to->host), ZSTR_LEN(resource_to->host), NULL, 0, NULL);
 	if (PHAR_G(readonly) && (!pto || !pto->is_data)) {
 		php_url_free(resource_from);
 		php_url_free(resource_to);
@@ -797,7 +795,8 @@ static int phar_wrapper_rename(php_stream_wrapper *wrapper, const char *url_from
 		return 0;
 	}

-	if (SUCCESS != phar_get_archive(&phar, ZSTR_VAL(resource_from->host), ZSTR_LEN(resource_from->host), NULL, 0, &error)) {
+	phar_archive_data *phar = phar_get_archive(ZSTR_VAL(resource_from->host), ZSTR_LEN(resource_from->host), NULL, 0, &error);
+	if (!phar) {
 		php_url_free(resource_from);
 		php_url_free(resource_to);
 		php_error_docref(NULL, E_WARNING, "phar error: cannot rename \"%s\" to \"%s\": %s", url_from, url_to, error);
diff --git a/ext/phar/util.c b/ext/phar/util.c
index cf3e6a90e51..331bbf6511b 100644
--- a/ext/phar/util.c
+++ b/ext/phar/util.c
@@ -309,7 +309,8 @@ zend_string *phar_find_in_include_path(zend_string *filename, phar_archive_data
 	}

 	if (*ZSTR_VAL(filename) == '.') {
-		if (FAILURE == phar_get_archive(&phar, ZSTR_VAL(arch), ZSTR_LEN(arch), NULL, 0, NULL)) {
+		phar = phar_get_archive(ZSTR_VAL(arch), ZSTR_LEN(arch), NULL, 0, NULL);
+		if (!phar) {
 			zend_string_release_ex(arch, false);
 			return NULL;
 		}
@@ -469,7 +470,6 @@ ZEND_ATTRIBUTE_NONNULL static zend_result phar_separate_entry_fp(phar_entry_info
  */
 ZEND_ATTRIBUTE_NONNULL zend_result phar_get_entry_data(phar_entry_data **ret, const zend_string *fname, char *path, size_t path_len, const char *mode, char allow_dir, char **error, bool security) /* {{{ */
 {
-	phar_archive_data *phar;
 	phar_entry_info *entry;
 	bool for_write  = mode[0] != 'r' || mode[1] == '+';
 	bool for_append = mode[0] == 'a';
@@ -479,7 +479,8 @@ ZEND_ATTRIBUTE_NONNULL zend_result phar_get_entry_data(phar_entry_data **ret, co
 	*ret = NULL;
 	*error = NULL;

-	if (FAILURE == phar_get_archive(&phar, ZSTR_VAL(fname), ZSTR_LEN(fname), NULL, 0, error)) {
+	phar_archive_data *phar = phar_get_archive(ZSTR_VAL(fname), ZSTR_LEN(fname), NULL, 0, error);
+	if (!phar) {
 		return FAILURE;
 	}

@@ -614,7 +615,6 @@ ZEND_ATTRIBUTE_NONNULL zend_result phar_get_entry_data(phar_entry_data **ret, co
  */
 ZEND_ATTRIBUTE_NONNULL phar_entry_data *phar_get_or_create_entry_data(zend_string *fname, char *path, size_t path_len, const char *mode, char allow_dir, char **error, bool security, uint32_t timestamp) /* {{{ */
 {
-	phar_archive_data *phar;
 	phar_entry_info etemp;
 	phar_entry_data *ret;
 	const char *pcr_error;
@@ -626,7 +626,8 @@ ZEND_ATTRIBUTE_NONNULL phar_entry_data *phar_get_or_create_entry_data(zend_strin

 	is_dir = (path_len && path[path_len - 1] == '/') ? 1 : 0;

-	if (FAILURE == phar_get_archive(&phar, ZSTR_VAL(fname), ZSTR_LEN(fname), NULL, 0, error)) {
+	phar_archive_data *phar = phar_get_archive(ZSTR_VAL(fname), ZSTR_LEN(fname), NULL, 0, error);
+	if (!phar) {
 		return NULL;
 	}

@@ -961,9 +962,9 @@ zend_result phar_free_alias(const phar_archive_data *phar) /* {{{ */
  * Looks up a phar archive in the filename map, connecting it to the alias
  * (if any) or returns null
  */
-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* phar_get_archive(const char *fname, size_t fname_len, const char *alias, size_t alias_len, char **error) /* {{{ */
 {
-	phar_archive_data *fd_ptr;
+	phar_archive_data *archive;

 	phar_request_initialize();

@@ -971,142 +972,132 @@ zend_result phar_get_archive(phar_archive_data **archive, const char *fname, siz
 		*error = NULL;
 	}

-	*archive = NULL;
-
 	if (PHAR_G(last_phar) && zend_string_equals_cstr(PHAR_G(last_phar_name), fname, fname_len)) {
-		*archive = PHAR_G(last_phar);
+		archive = PHAR_G(last_phar);
 		if (alias && alias_len) {

 			if (!PHAR_G(last_phar)->is_temporary_alias && (alias_len != PHAR_G(last_phar)->alias_len || memcmp(PHAR_G(last_phar)->alias, alias, alias_len))) {
 				if (error) {
 					spprintf(error, 0, "alias \"%s\" is already used for archive \"%s\" cannot be overloaded with \"%s\"", alias, ZSTR_VAL(PHAR_G(last_phar)->fname), fname);
 				}
-				*archive = NULL;
-				return FAILURE;
+				return NULL;
 			}

 			if (PHAR_G(last_phar)->alias_len && zend_hash_str_exists(&(PHAR_G(phar_alias_map)), PHAR_G(last_phar)->alias, PHAR_G(last_phar)->alias_len)) {
 				zend_hash_str_del(&(PHAR_G(phar_alias_map)), PHAR_G(last_phar)->alias, PHAR_G(last_phar)->alias_len);
 			}

-			zend_hash_str_add_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len, *archive);
+			zend_hash_str_add_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len, archive);
 			PHAR_G(last_alias) = alias;
 			PHAR_G(last_alias_len) = alias_len;
 		}

-		return SUCCESS;
+		return archive;
 	}

 	if (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_ptr = PHAR_G(last_phar);
+			archive = PHAR_G(last_phar);
 		} else {
-			fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len);
+			archive = 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 (!archive && PHAR_G(manifest_cached)) {
+			archive = zend_hash_str_find_ptr(&cached_alias, alias, alias_len);
 		}

-		if (fd_ptr) {
-			if (!zend_string_equals_cstr(fd_ptr->fname, fname, fname_len)) {
+		if (archive) {
+			if (!zend_string_equals_cstr(archive->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);
+					spprintf(error, 0, "alias \"%s\" is already used for archive \"%s\" cannot be overloaded with \"%s\"", alias, ZSTR_VAL(archive->fname), fname);
 				}
-				if (SUCCESS == phar_free_alias(fd_ptr)) {
+				if (SUCCESS == phar_free_alias(archive)) {
 					if (error) {
 						efree(*error);
 						*error = NULL;
 					}
 				}
-				return FAILURE;
+				return NULL;
 			}

-			*archive = fd_ptr;
-			PHAR_G(last_phar) = fd_ptr;
-			PHAR_G(last_phar_name) = fd_ptr->fname;
+			PHAR_G(last_phar) = archive;
+			PHAR_G(last_phar_name) = archive->fname;
 			PHAR_G(last_alias) = alias;
 			PHAR_G(last_alias_len) = alias_len;

-			return SUCCESS;
+			return archive;
 		}
 	}

 	if (fname && fname_len) {
-		fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_fname_map)), fname, fname_len);
-		if (fd_ptr) {
-			*archive = fd_ptr;
-
+		archive = zend_hash_str_find_ptr(&(PHAR_G(phar_fname_map)), fname, fname_len);
+		if (archive) {
 			if (alias && alias_len) {
-				if (!fd_ptr->is_temporary_alias && (alias_len != fd_ptr->alias_len || memcmp(fd_ptr->alias, alias, alias_len))) {
+				if (!archive->is_temporary_alias && (alias_len != archive->alias_len || memcmp(archive->alias, alias, alias_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);
+						spprintf(error, 0, "alias \"%s\" is already used for archive \"%s\" cannot be overloaded with \"%s\"", alias, ZSTR_VAL(archive->fname), fname);
 					}
-					return FAILURE;
+					return NULL;
 				}

-				if (fd_ptr->alias_len && zend_hash_str_exists(&(PHAR_G(phar_alias_map)), fd_ptr->alias, fd_ptr->alias_len)) {
-					zend_hash_str_del(&(PHAR_G(phar_alias_map)), fd_ptr->alias, fd_ptr->alias_len);
+				if (archive->alias_len && zend_hash_str_exists(&(PHAR_G(phar_alias_map)), archive->alias, archive->alias_len)) {
+					zend_hash_str_del(&(PHAR_G(phar_alias_map)), archive->alias, archive->alias_len);
 				}

-				zend_hash_str_add_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len, fd_ptr);
+				zend_hash_str_add_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len, archive);
 			}

-			PHAR_G(last_phar) = fd_ptr;
-			PHAR_G(last_phar_name) = fd_ptr->fname;
-			PHAR_G(last_alias) = fd_ptr->alias;
-			PHAR_G(last_alias_len) = fd_ptr->alias_len;
+			PHAR_G(last_phar) = archive;
+			PHAR_G(last_phar_name) = archive->fname;
+			PHAR_G(last_alias) = archive->alias;
+			PHAR_G(last_alias_len) = archive->alias_len;

-			return SUCCESS;
+			return archive;
 		}

-		if (PHAR_G(manifest_cached) && NULL != (fd_ptr = zend_hash_str_find_ptr(&cached_phars, fname, fname_len))) {
-			*archive = fd_ptr;
-
+		if (PHAR_G(manifest_cached) && NULL != (archive = zend_hash_str_find_ptr(&cached_phars, fname, fname_len))) {
 			/* this could be problematic - alias should never be different from manifest alias
 			   for cached phars */
-			if (!fd_ptr->is_temporary_alias && alias && alias_len) {
-				if (alias_len != fd_ptr->alias_len || memcmp(fd_ptr->alias, alias, alias_len)) {
+			if (!archive->is_temporary_alias && alias && alias_len) {
+				if (alias_len != archive->alias_len || memcmp(archive->alias, alias, alias_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);
+						spprintf(error, 0, "alias \"%s\" is already used for archive \"%s\" cannot be overloaded with \"%s\"", alias, ZSTR_VAL(archive->fname), fname);
 					}
-					return FAILURE;
+					return NULL;
 				}
 			}

-			PHAR_G(last_phar) = fd_ptr;
-			PHAR_G(last_phar_name) = fd_ptr->fname;
-			PHAR_G(last_alias) = fd_ptr->alias;
-			PHAR_G(last_alias_len) = fd_ptr->alias_len;
+			PHAR_G(last_phar) = archive;
+			PHAR_G(last_phar_name) = archive->fname;
+			PHAR_G(last_alias) = archive->alias;
+			PHAR_G(last_alias_len) = archive->alias_len;

-			return SUCCESS;
+			return archive;
 		}

-		fd_ptr = zend_hash_str_find_ptr(&(PHAR_G(phar_alias_map)), fname, fname_len);
+		archive = zend_hash_str_find_ptr(&(PHAR_G(phar_alias_map)), fname, fname_len);

 		/* If we didn't find the fname in the alias 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_alias, fname, fname_len);
+		if (!archive && PHAR_G(manifest_cached)) {
+			archive = zend_hash_str_find_ptr(&cached_alias, fname, fname_len);
 		}

-		if (fd_ptr) {
-			*archive = fd_ptr;
-
-			PHAR_G(last_phar) = fd_ptr;
-			PHAR_G(last_phar_name) = fd_ptr->fname;
-			PHAR_G(last_alias) = fd_ptr->alias;
-			PHAR_G(last_alias_len) = fd_ptr->alias_len;
+		if (archive) {
+			PHAR_G(last_phar) = archive;
+			PHAR_G(last_phar_name) = archive->fname;
+			PHAR_G(last_alias) = archive->alias;
+			PHAR_G(last_alias_len) = archive->alias_len;

-			return SUCCESS;
+			return archive;
 		}

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

 		if (UNEXPECTED(!my_realpath)) {
-			return FAILURE;
+			return NULL;
 		}

 		size_t my_realpath_len = strlen(my_realpath);
@@ -1114,31 +1105,29 @@ zend_result phar_get_archive(phar_archive_data **archive, const char *fname, siz
 		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);
+		archive = 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, my_realpath, my_realpath_len);
+		if (!archive && PHAR_G(manifest_cached)) {
+			archive = zend_hash_str_find_ptr(&cached_phars, my_realpath, my_realpath_len);
 		}
 		efree(my_realpath);

-		if (fd_ptr) {
-			*archive = fd_ptr;
-
+		if (archive) {
 			if (alias && alias_len) {
-				zend_hash_str_add_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len, fd_ptr);
+				zend_hash_str_add_ptr(&(PHAR_G(phar_alias_map)), alias, alias_len, archive);
 			}

-			PHAR_G(last_phar) = fd_ptr;
-			PHAR_G(last_phar_name) = fd_ptr->fname;
-			PHAR_G(last_alias) = fd_ptr->alias;
-			PHAR_G(last_alias_len) = fd_ptr->alias_len;
+			PHAR_G(last_phar) = archive;
+			PHAR_G(last_phar_name) = archive->fname;
+			PHAR_G(last_alias) = archive->alias;
+			PHAR_G(last_alias_len) = archive->alias_len;

-			return SUCCESS;
+			return archive;
 		}
 	}

-	return FAILURE;
+	return NULL;
 }
 /* }}} */

diff --git a/ext/phar/zip.c b/ext/phar/zip.c
index da934a4c004..8f61977a383 100644
--- a/ext/phar/zip.c
+++ b/ext/phar/zip.c
@@ -1271,7 +1271,8 @@ ZEND_ATTRIBUTE_NONNULL_ARGS(1, 4) int phar_zip_flush(phar_archive_data *phar, ze

 	/* register alias */
 	if (phar->alias_len) {
-		if (FAILURE == phar_get_archive(&phar, ZSTR_VAL(phar->fname), ZSTR_LEN(phar->fname), phar->alias, phar->alias_len, error)) {
+		phar = phar_get_archive(ZSTR_VAL(phar->fname), ZSTR_LEN(phar->fname), phar->alias, phar->alias_len, error);
+		if (!phar) {
 			return EOF;
 		}
 	}