From 4e0ae93b12c18b5db92d703c1b079d45d2b692f2 Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Tue, 21 Apr 2026 22:13:40 +0100 Subject: [PATCH 1/2] ext/phar: mark _phar_archive_data.ext field as const This char* is derived from the fname char* field. --- ext/phar/phar_internal.h | 4 ++-- ext/phar/phar_object.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ext/phar/phar_internal.h b/ext/phar/phar_internal.h index db2856309fcb..a79a1df0202d 100644 --- a/ext/phar/phar_internal.h +++ b/ext/phar/phar_internal.h @@ -245,9 +245,9 @@ typedef struct _phar_entry_info { struct _phar_archive_data { char *fname; uint32_t fname_len; - /* for phar_detect_fname_ext, this stores the location of the file extension within fname */ + /* The ext field stores the location of the file extension from the fname field, and thus should never be freed. */ uint32_t ext_len; - char *ext; + const char *ext; char *alias; uint32_t alias_len; char version[12]; diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index 377f35832910..b00bfa1677d4 100644 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -2113,7 +2113,7 @@ static zend_object *phar_rename_archive(phar_archive_data **sphar, char *ext) /* goto err_reused_oldpath; } if (!phar->is_data) { - if (SUCCESS != phar_detect_phar_fname_ext(newpath, phar->fname_len, (const char **) &(phar->ext), &ext_len, 1, 1, true)) { + if (SUCCESS != phar_detect_phar_fname_ext(newpath, phar->fname_len, &(phar->ext), &ext_len, 1, 1, true)) { zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "phar \"%s\" has invalid extension %s", phar->fname, ext); goto err_reused_oldpath; } @@ -2136,7 +2136,7 @@ static zend_object *phar_rename_archive(phar_archive_data **sphar, char *ext) /* } else { - if (SUCCESS != phar_detect_phar_fname_ext(newpath, phar->fname_len, (const char **) &(phar->ext), &ext_len, 0, 1, true)) { + if (SUCCESS != phar_detect_phar_fname_ext(newpath, phar->fname_len, &(phar->ext), &ext_len, 0, 1, true)) { zend_throw_exception_ex(spl_ce_BadMethodCallException, 0, "data phar \"%s\" has invalid extension %s", phar->fname, ext); goto err_reused_oldpath; } From 4d2a5b7e19c98f225ec3e69c343a058cfd4354e8 Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Tue, 21 Apr 2026 22:21:37 +0100 Subject: [PATCH 2/2] ext/phar: mark last_phar_name global cache field as const As this is derived from a live char* pointer where we don't have the ownership. --- ext/phar/phar_internal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ext/phar/phar_internal.h b/ext/phar/phar_internal.h index a79a1df0202d..8d7632fbb4dd 100644 --- a/ext/phar/phar_internal.h +++ b/ext/phar/phar_internal.h @@ -146,7 +146,7 @@ ZEND_BEGIN_MODULE_GLOBALS(phar) char *openssl_privatekey; uint32_t openssl_privatekey_len; /* phar_get_archive cache */ - char* last_phar_name; + const char *last_phar_name; uint32_t last_phar_name_len; uint32_t last_alias_len; const char* last_alias;