1
0
mirror of https://github.com/Ne-Lexa/php-zip.git synced 2025-10-12 13:54:28 +02:00

zip extra tests, php 32-bit compat

This commit is contained in:
Ne-Lexa
2020-01-14 16:31:22 +03:00
parent d21fdb35bb
commit 8487dac9df
13 changed files with 246 additions and 122 deletions

View File

@@ -366,7 +366,7 @@ class ZipReader
/** @var UnicodePathExtraField|null $unicodePathExtraField */
$unicodePathExtraField = $zipEntry->getExtraField(UnicodePathExtraField::HEADER_ID);
if ($unicodePathExtraField !== null) {
if ($unicodePathExtraField !== null && $unicodePathExtraField->getCrc32() === crc32($entryName)) {
$unicodePath = $unicodePathExtraField->getUnicodeValue();
if ($unicodePath !== null) {
@@ -543,25 +543,23 @@ class ZipReader
/** @var string|ZipExtraField|null $className */
$className = ZipExtraDriver::getClassNameOrNull($headerId);
if ($className !== null) {
try {
$extraField = $local ?
\call_user_func([$className, 'unpackLocalFileData'], $bufferData, $zipEntry) :
\call_user_func([$className, 'unpackCentralDirData'], $bufferData, $zipEntry);
} catch (\Throwable $e) {
throw new \RuntimeException(
sprintf(
'Error parse %s extra field 0x%04X',
$local ? 'local' : 'central directory',
$headerId
)
);
try {
if ($className !== null) {
try {
$extraField = $local ?
\call_user_func([$className, 'unpackLocalFileData'], $bufferData, $zipEntry) :
\call_user_func([$className, 'unpackCentralDirData'], $bufferData, $zipEntry);
} catch (\Throwable $e) {
// skip errors while parsing invalid data
continue;
}
} else {
$extraField = new UnrecognizedExtraField($headerId, $bufferData);
}
} else {
$extraField = new UnrecognizedExtraField($headerId, $bufferData);
$collection->add($extraField);
} finally {
$pos += $data['dataSize'];
}
$collection->add($extraField);
$pos += $data['dataSize'];
}
}