Skip to content

Commit

Permalink
Merge branch 'PHP-8.4'
Browse files Browse the repository at this point in the history
* PHP-8.4:
  Fix GH-16406: Assertion failure in ext/phar/phar.c:2808
  • Loading branch information
nielsdos committed Oct 17, 2024
2 parents a73754f + d8e5166 commit 7aeafe4
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
3 changes: 3 additions & 0 deletions ext/phar/phar_object.c
Original file line number Diff line number Diff line change
Expand Up @@ -2308,6 +2308,9 @@ static zend_object *phar_convert_to_other(phar_archive_data *source, int convert
newentry.tar_type = (entry->is_dir ? TAR_DIR : TAR_FILE);
}

/* The header offset is only used for unmodified zips.
* Once modified, phar_zip_changed_apply_int() will update the header_offset. */
newentry.header_offset = 0;
newentry.is_modified = 1;
newentry.phar = phar;
newentry.old_flags = newentry.flags & ~PHAR_ENT_COMPRESSION_MASK; /* remove compression from old_flags */
Expand Down
35 changes: 35 additions & 0 deletions ext/phar/tests/gh16406.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
--TEST--
GH-16406 (Assertion failure in ext/phar/phar.c:2808)
--EXTENSIONS--
phar
zlib
--INI--
phar.readonly=0
phar.require_hash=0
--FILE--
<?php
$fname = __DIR__ . '/gh16406.phar';
@unlink($fname . '.tar');
@unlink($fname . '.gz');
@unlink($fname);
$file = '<?php __HALT_COMPILER(); ?>';
$files['b'] = 'b';
$files['c'] = 'c';
include __DIR__.'/files/phar_test.inc';
$phar = new Phar($fname);
$phar->compressFiles(Phar::GZ);
$phar = $phar->convertToExecutable(Phar::TAR);
$phar = $phar->convertToExecutable(Phar::PHAR, Phar::GZ);
var_dump($phar['b']->openFile()->fread(4096));
var_dump($phar['c']->openFile()->fread(4096));
?>
--CLEAN--
<?php
$fname = __DIR__ . '/gh16406.phar';
@unlink($fname . '.tar');
@unlink($fname . '.gz');
@unlink($fname);
?>
--EXPECT--
string(1) "b"
string(1) "c"

0 comments on commit 7aeafe4

Please sign in to comment.