From a4ba67b0af6b1f2c821114a58822a765c5de0bc5 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sat, 4 Jan 2025 13:19:08 +0100 Subject: [PATCH] Fix persistent local flag on filename zend_strings in phar This fixes the nightly failure. --- ext/phar/phar.c | 3 +++ ext/phar/tar.c | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/ext/phar/phar.c b/ext/phar/phar.c index a3a2441d1e708..465ca5d19c0ae 100644 --- a/ext/phar/phar.c +++ b/ext/phar/phar.c @@ -1182,6 +1182,9 @@ static zend_result phar_parse_pharfile(php_stream *fp, char *fname, size_t fname } entry.filename = zend_string_init(filename_raw, filename_len, entry.is_persistent); + if (entry.is_persistent) { + GC_MAKE_PERSISTENT_LOCAL(entry.filename); + } PHAR_GET_32(buffer, len); if (len > (size_t)(endbuffer - buffer)) { diff --git a/ext/phar/tar.c b/ext/phar/tar.c index 31a820125642f..a91419d84c779 100644 --- a/ext/phar/tar.c +++ b/ext/phar/tar.c @@ -374,6 +374,9 @@ zend_result phar_parse_tarfile(php_stream* fp, char *fname, size_t fname_len, ch return FAILURE; } entry.filename = zend_string_alloc(entry.uncompressed_filesize, myphar->is_persistent); + if (myphar->is_persistent) { + GC_MAKE_PERSISTENT_LOCAL(entry.filename); + } ZSTR_VAL(entry.filename)[entry.uncompressed_filesize] = '\0'; read = php_stream_read(fp, ZSTR_VAL(entry.filename), entry.uncompressed_filesize); @@ -440,6 +443,9 @@ zend_result phar_parse_tarfile(php_stream* fp, char *fname, size_t fname_len, ch } entry.filename = zend_string_init(name, filename_len, myphar->is_persistent); + if (myphar->is_persistent) { + GC_MAKE_PERSISTENT_LOCAL(entry.filename); + } } else if (!last_was_longlink) { /* calculate strlen, which can be no longer than 100 */ uint32_t filename_len; @@ -455,6 +461,9 @@ zend_result phar_parse_tarfile(php_stream* fp, char *fname, size_t fname_len, ch } entry.filename = zend_string_init(hdr->name, filename_len, myphar->is_persistent); + if (myphar->is_persistent) { + GC_MAKE_PERSISTENT_LOCAL(entry.filename); + } } last_was_longlink = 0;