diff --git a/src/PhpZip/Crypto/TraditionalPkwareEncryptionEngine.php b/src/PhpZip/Crypto/TraditionalPkwareEncryptionEngine.php index 45881e0..8a5978b 100644 --- a/src/PhpZip/Crypto/TraditionalPkwareEncryptionEngine.php +++ b/src/PhpZip/Crypto/TraditionalPkwareEncryptionEngine.php @@ -148,7 +148,10 @@ class TraditionalPkwareEncryptionEngine implements ZipEncryptionEngine $checkByte = ($this->entry->getCrc() >> 24) & 0xff; } if ($byte !== $checkByte) { - throw new ZipAuthenticationException("Bad password for entry " . $this->entry->getName()); + throw new ZipAuthenticationException(sprintf( + 'Invalid password for zip entry "%s"', + $this->entry->getName() + )); } $outputContent = ""; diff --git a/src/PhpZip/Stream/ZipInputStream.php b/src/PhpZip/Stream/ZipInputStream.php index b14fd9c..dbbbd3e 100644 --- a/src/PhpZip/Stream/ZipInputStream.php +++ b/src/PhpZip/Stream/ZipInputStream.php @@ -7,7 +7,7 @@ use PhpZip\Crypto\WinZipAesEngine; use PhpZip\Exception\Crc32Exception; use PhpZip\Exception\InvalidArgumentException; use PhpZip\Exception\RuntimeException; -use PhpZip\Exception\ZipCryptoException; +use PhpZip\Exception\ZipAuthenticationException; use PhpZip\Exception\ZipException; use PhpZip\Exception\ZipUnsupportMethodException; use PhpZip\Extra\ExtraFieldsCollection; @@ -470,7 +470,7 @@ class ZipInputStream implements ZipInputStreamInterface case ZipFileInterface::METHOD_STORED: break; case ZipFileInterface::METHOD_DEFLATED: - $content = gzinflate($content); + $content = @gzinflate($content); break; case ZipFileInterface::METHOD_BZIP2: if (!extension_loaded('bz2')) { @@ -478,6 +478,9 @@ class ZipInputStream implements ZipInputStreamInterface } /** @noinspection PhpComposerExtensionStubsInspection */ $content = bzdecompress($content); + if (is_int($content)) { // decompress error + $content = false; + } break; default: throw new ZipUnsupportMethodException($entry->getName() . @@ -485,6 +488,12 @@ class ZipInputStream implements ZipInputStreamInterface } if ($content === false) { + if ($isEncrypted) { + throw new ZipAuthenticationException(sprintf( + 'Invalid password for zip entry "%s"', + $entry->getName() + )); + } throw new ZipException(sprintf( 'Failed to get the contents of the zip entry "%s"', $entry->getName() @@ -497,7 +506,10 @@ class ZipInputStream implements ZipInputStreamInterface $crc = PHP_INT_SIZE === 4 ? sprintf('%u', $entry->getCrc()) : $entry->getCrc(); if ($crc != $localCrc) { if ($isEncrypted) { - throw new ZipCryptoException("Wrong password"); + throw new ZipAuthenticationException(sprintf( + 'Invalid password for zip entry "%s"', + $entry->getName() + )); } throw new Crc32Exception($entry->getName(), $crc, $localCrc); } diff --git a/src/PhpZip/Stream/ZipInputStreamInterface.php b/src/PhpZip/Stream/ZipInputStreamInterface.php index 2093c03..cf8e122 100644 --- a/src/PhpZip/Stream/ZipInputStreamInterface.php +++ b/src/PhpZip/Stream/ZipInputStreamInterface.php @@ -2,6 +2,7 @@ namespace PhpZip\Stream; +use PhpZip\Exception\ZipException; use PhpZip\Model\ZipEntry; use PhpZip\Model\ZipModel; @@ -26,6 +27,7 @@ interface ZipInputStreamInterface /** * @param ZipEntry $entry * @return string + * @throws ZipException */ public function readEntryContent(ZipEntry $entry); diff --git a/tests/PhpZip/PhpZipExtResourceTest.php b/tests/PhpZip/PhpZipExtResourceTest.php index 595b1fb..0c4dba7 100644 --- a/tests/PhpZip/PhpZipExtResourceTest.php +++ b/tests/PhpZip/PhpZipExtResourceTest.php @@ -101,7 +101,7 @@ class PhpZipExtResourceTest extends ZipTestCase * Bug #70752 (Depacking with wrong password leaves 0 length files) * @see https://github.com/php/php-src/blob/master/ext/zip/tests/bug70752.phpt * @expectedException \PhpZip\Exception\ZipAuthenticationException - * @expectedExceptionMessage Bad password for entry bug70752.txt + * @expectedExceptionMessage nvalid password for zip entry "bug70752.txt" * @throws ZipException */ public function testBug70752() diff --git a/tests/PhpZip/ZipPasswordTest.php b/tests/PhpZip/ZipPasswordTest.php index bfed2e9..a887126 100644 --- a/tests/PhpZip/ZipPasswordTest.php +++ b/tests/PhpZip/ZipPasswordTest.php @@ -43,7 +43,7 @@ class ZipPasswordTest extends ZipFileAddDirTest $zipFile[$entryName]; $this->fail("Expected Exception has not been raised."); } catch (ZipAuthenticationException $ae) { - $this->assertContains('Bad password for entry', $ae->getMessage()); + $this->assertContains('Invalid password for zip entry', $ae->getMessage()); } }