Commit f31e4e6068f for php.net
commit f31e4e6068f0659f25c9be15da82a67e9c45a137
Author: Gina Peter Banyard <girgias@php.net>
Date: Thu Apr 30 15:35:18 2026 +0100
ext/phar: convert phar_open_executed_filename() to use zend_string for alias (#21916)
diff --git a/ext/phar/phar.c b/ext/phar/phar.c
index cd363fbd88e..d3b14b65504 100644
--- a/ext/phar/phar.c
+++ b/ext/phar/phar.c
@@ -2252,7 +2252,7 @@ zend_string* phar_split_fname(const char *filename, size_t filename_len, zend_st
* Invoked when a user calls Phar::mapPhar() from within an executing .phar
* to set up its manifest directly
*/
-ZEND_ATTRIBUTE_NONNULL_ARGS(3) zend_result phar_open_executed_filename(const char *alias, size_t alias_len, char **error) /* {{{ */
+ZEND_ATTRIBUTE_NONNULL_ARGS(2) zend_result phar_open_executed_filename(const zend_string *alias, char **error) /* {{{ */
{
*error = NULL;
@@ -2263,7 +2263,9 @@ ZEND_ATTRIBUTE_NONNULL_ARGS(3) zend_result phar_open_executed_filename(const cha
return FAILURE;
}
- if (phar_open_parsed_phar(ZSTR_VAL(fname), ZSTR_LEN(fname), alias, alias_len, false, REPORT_ERRORS, NULL, NULL) == SUCCESS) {
+ const char *alias_cstr = alias ? ZSTR_VAL(alias) : NULL;
+ size_t alias_len = alias ? ZSTR_LEN(alias) : 0;
+ if (phar_open_parsed_phar(ZSTR_VAL(fname), ZSTR_LEN(fname), alias_cstr, alias_len, false, REPORT_ERRORS, NULL, NULL) == SUCCESS) {
return SUCCESS;
}
@@ -2292,7 +2294,7 @@ ZEND_ATTRIBUTE_NONNULL_ARGS(3) zend_result phar_open_executed_filename(const cha
fname = actual;
}
- zend_result ret = phar_open_from_fp(fp, ZSTR_VAL(fname), ZSTR_LEN(fname), alias, alias_len, REPORT_ERRORS, NULL, error);
+ zend_result ret = phar_open_from_fp(fp, ZSTR_VAL(fname), ZSTR_LEN(fname), alias_cstr, alias_len, REPORT_ERRORS, NULL, error);
if (actual) {
zend_string_release_ex(actual, 0);
diff --git a/ext/phar/phar_internal.h b/ext/phar/phar_internal.h
index 7a923fd15e1..30018986f1f 100644
--- a/ext/phar/phar_internal.h
+++ b/ext/phar/phar_internal.h
@@ -409,7 +409,7 @@ ZEND_ATTRIBUTE_NONNULL zend_result phar_postprocess_file(phar_entry_data *idata,
zend_result phar_open_from_filename(char *fname, size_t fname_len, const char *alias, size_t alias_len, uint32_t options, phar_archive_data** pphar, char **error);
ZEND_ATTRIBUTE_NONNULL_ARGS(1, 6, 7) zend_result phar_open_or_create_filename(zend_string *fname, const char *alias, size_t alias_len, bool is_data, uint32_t options, phar_archive_data** pphar, char **error);
ZEND_ATTRIBUTE_NONNULL_ARGS(1, 6, 7) zend_result phar_create_or_parse_filename(zend_string *fname, const 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(const char *alias, size_t alias_len, char **error);
+ZEND_ATTRIBUTE_NONNULL_ARGS(2) zend_result phar_open_executed_filename(const zend_string *alias, char **error);
zend_result phar_free_alias(const phar_archive_data *phar);
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);
diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c
index 00a5ebf3058..32c7d2b866c 100644
--- a/ext/phar/phar_object.c
+++ b/ext/phar/phar_object.c
@@ -549,8 +549,8 @@ PHP_METHOD(Phar, webPhar)
zval *mimeoverride = NULL;
zend_fcall_info rewrite_fci = {0};
zend_fcall_info_cache rewrite_fcc;
- char *alias = NULL, *error, *index_php = NULL, *ru = NULL;
- size_t alias_len = 0, free_pathinfo = 0;
+ char *error, *index_php = NULL, *ru = NULL;
+ size_t free_pathinfo = 0;
zend_string *f404 = NULL;
size_t ru_len = 0;
char *fname, *path_info, *mime_type = NULL, *entry, *pt;
@@ -562,14 +562,15 @@ PHP_METHOD(Phar, webPhar)
phar_entry_info *info = NULL;
size_t sapi_mod_name_len = strlen(sapi_module.name);
phar_action_status status = PHAR_ACT_DO_EXIT;
+ zend_string *alias = NULL;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s!s!S!af!", &alias, &alias_len, &index_php, &index_php_len, &f404, &mimeoverride, &rewrite_fci, &rewrite_fcc) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|S!s!S!af!", &alias, &index_php, &index_php_len, &f404, &mimeoverride, &rewrite_fci, &rewrite_fcc) == FAILURE) {
RETURN_THROWS();
}
phar_request_initialize();
- if (phar_open_executed_filename(alias, alias_len, &error) != SUCCESS) {
+ if (phar_open_executed_filename(alias, &error) != SUCCESS) {
if (error) {
zend_throw_exception_ex(phar_ce_PharException, 0, "%s", error);
efree(error);
@@ -947,17 +948,17 @@ PHP_METHOD(Phar, createDefaultStub)
/* {{{ Reads the currently executed file (a phar) and registers its manifest */
PHP_METHOD(Phar, mapPhar)
{
- char *alias = NULL, *error;
- size_t alias_len = 0;
+ zend_string *alias = NULL;
+ char *error;
zend_long dataoffset = 0;
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "|s!l", &alias, &alias_len, &dataoffset) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "|S!l", &alias, &dataoffset) == FAILURE) {
RETURN_THROWS();
}
phar_request_initialize();
- RETVAL_BOOL(phar_open_executed_filename(alias, alias_len, &error) == SUCCESS);
+ RETVAL_BOOL(phar_open_executed_filename(alias, &error) == SUCCESS);
if (error) {
zend_throw_exception_ex(phar_ce_PharException, 0, "%s", error);