openFile($filename); foreach ($zipFile as $name => $contents) { $info = $zipFile->getEntryInfo($name); self::assertSame(\strlen($contents), $info->getSize()); } $zipFile->close(); self::assertCorrectZipArchive($filename); } /** * Bug #8009 (cannot add again same entry to an archive). * * @see https://github.com/php/php-src/blob/master/ext/zip/tests/bug8009.phpt * * @throws ZipException */ public function testBug8009() { $filename = __DIR__ . '/resources/pecl/bug8009.zip'; $zipFile = new ZipFile(); $zipFile->openFile($filename); $zipFile->addFromString('2.txt', '=)'); $zipFile->saveAsFile($this->outputFilename); $zipFile->close(); self::assertCorrectZipArchive($this->outputFilename); $zipFile->openFile($this->outputFilename); self::assertCount(2, $zipFile); self::assertTrue(isset($zipFile['1.txt'])); self::assertTrue(isset($zipFile['2.txt'])); self::assertSame($zipFile['2.txt'], $zipFile['1.txt']); $zipFile->close(); } /** * Bug #40228 (extractTo does not create recursive empty path). * * @see https://github.com/php/php-src/blob/master/ext/zip/tests/bug40228.phpt * @see https://github.com/php/php-src/blob/master/ext/zip/tests/bug40228-mb.phpt * @dataProvider provideBug40228 * * @param string $filename * * @throws ZipException */ public function testBug40228($filename) { self::assertTrue(mkdir($this->outputDirname, 0755, true)); $zipFile = new ZipFile(); $zipFile->openFile($filename); $zipFile->extractTo($this->outputDirname); $zipFile->close(); self::assertDirectoryExists($this->outputDirname . '/test/empty'); } /** * @return array */ public function provideBug40228() { return [ [__DIR__ . '/resources/pecl/bug40228.zip'], ]; } /** * Bug #49072 (feof never returns true for damaged file in zip). * * @see https://github.com/php/php-src/blob/master/ext/zip/tests/bug49072.phpt * * @throws ZipException */ public function testBug49072() { $this->expectException(Crc32Exception::class); $this->expectExceptionMessage('file1'); $filename = __DIR__ . '/resources/pecl/bug49072.zip'; $zipFile = new ZipFile(); $zipFile->openFile($filename); $zipFile->getEntryContents('file1'); } /** * Bug #70752 (Depacking with wrong password leaves 0 length files). * * @see https://github.com/php/php-src/blob/master/ext/zip/tests/bug70752.phpt * * @throws ZipException */ public function testBug70752() { if (\PHP_INT_SIZE === 4) { // php 32 bit $this->expectException(RuntimeException::class); $this->expectExceptionMessage('Traditional PKWARE Encryption is not supported in 32-bit PHP.'); } else { // php 64 bit $this->expectException(ZipAuthenticationException::class); $this->expectExceptionMessage('Invalid password'); } $filename = __DIR__ . '/resources/pecl/bug70752.zip'; self::assertTrue(mkdir($this->outputDirname, 0755, true)); $zipFile = new ZipFile(); $zipFile->openFile($filename); $zipFile->setReadPassword('bar'); try { $zipFile->extractTo($this->outputDirname); self::markTestIncomplete('failed test'); } catch (ZipException $exception) { self::assertFileDoesNotExist($this->outputDirname . '/bug70752.txt'); throw $exception; } } /** * Bug #12414 ( extracting files from damaged archives). * * @see https://github.com/php/php-src/blob/master/ext/zip/tests/pecl12414.phpt * * @throws ZipException */ public function testPecl12414() { $this->expectException(ZipException::class); $this->expectExceptionMessage('Corrupt zip file. Cannot read zip entry.'); $filename = __DIR__ . '/resources/pecl/pecl12414.zip'; $zipFile = new ZipFile(); $zipFile->openFile($filename); } }