Skip to content

Commit 7adc3e8

Browse files
committed
Merge branch 'PHP-8.0'
* PHP-8.0: Fix #75102: `PharData` says invalid checksum for valid tar
2 parents 1748329 + b52db13 commit 7adc3e8

File tree

3 files changed

+22
-0
lines changed

3 files changed

+22
-0
lines changed

ext/phar/tar.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,15 @@ int phar_parse_tarfile(php_stream* fp, char *fname, size_t fname_len, char *alia
268268
memset(hdr->checksum, ' ', sizeof(hdr->checksum));
269269
sum2 = phar_tar_checksum(buf, old?sizeof(old_tar_header):sizeof(tar_header));
270270

271+
if (old && sum2 != sum1) {
272+
uint32_t sum3 = phar_tar_checksum(buf, sizeof(tar_header));
273+
if (sum3 == sum1) {
274+
/* apparently a broken tar which is in ustar format w/o setting the ustar marker */
275+
sum2 = sum3;
276+
old = 0;
277+
}
278+
}
279+
271280
size = entry.uncompressed_filesize = entry.compressed_filesize =
272281
phar_tar_number(hdr->size, sizeof(hdr->size));
273282

ext/phar/tests/bug75102.phpt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
--TEST--
2+
Bug #75102 (`PharData` says invalid checksum for valid tar)
3+
--SKIPIF--
4+
<?php
5+
if (!extension_loaded('phar')) die('skip phar extension not available');
6+
?>
7+
--FILE--
8+
<?php
9+
$phar = new PharData(__DIR__ . '/bug75102.tar');
10+
var_dump(file_get_contents($phar['test.txt']->getPathName()));
11+
?>
12+
--EXPECT--
13+
string(9) "yada yada"

ext/phar/tests/bug75102.tar

2 KB
Binary file not shown.

0 commit comments

Comments
 (0)