2
0

PhpZipExtResourceTest.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <?php
  2. namespace PhpZip;
  3. use PhpZip\Exception\ZipException;
  4. /**
  5. * Some tests from the official extension of php-zip.
  6. */
  7. class PhpZipExtResourceTest extends ZipTestCase
  8. {
  9. /**
  10. * Bug #7214 (zip_entry_read() binary safe)
  11. * @see https://github.com/php/php-src/blob/master/ext/zip/tests/bug7214.phpt
  12. * @throws ZipException
  13. */
  14. public function testBinaryNull()
  15. {
  16. $filename = __DIR__ . '/php-zip-ext-test-resources/binarynull.zip';
  17. $zipFile = new ZipFile();
  18. $zipFile->openFile($filename);
  19. foreach ($zipFile as $name => $contents) {
  20. $info = $zipFile->getEntryInfo($name);
  21. $this->assertEquals(strlen($contents), $info->getSize());
  22. }
  23. $zipFile->close();
  24. $this->assertCorrectZipArchive($filename);
  25. }
  26. /**
  27. * Bug #8009 (cannot add again same entry to an archive)
  28. * @see https://github.com/php/php-src/blob/master/ext/zip/tests/bug8009.phpt
  29. * @throws ZipException
  30. */
  31. public function testBug8009()
  32. {
  33. $filename = __DIR__ . '/php-zip-ext-test-resources/bug8009.zip';
  34. $zipFile = new ZipFile();
  35. $zipFile->openFile($filename);
  36. $zipFile->addFromString('2.txt', '=)');
  37. $zipFile->saveAsFile($this->outputFilename);
  38. $zipFile->close();
  39. $this->assertCorrectZipArchive($this->outputFilename);
  40. $zipFile->openFile($this->outputFilename);
  41. $this->assertCount(2, $zipFile);
  42. $this->assertTrue(isset($zipFile['1.txt']));
  43. $this->assertTrue(isset($zipFile['2.txt']));
  44. $this->assertEquals($zipFile['2.txt'], $zipFile['1.txt']);
  45. $zipFile->close();
  46. }
  47. /**
  48. * Bug #40228 (extractTo does not create recursive empty path)
  49. * @see https://github.com/php/php-src/blob/master/ext/zip/tests/bug40228.phpt
  50. * @see https://github.com/php/php-src/blob/master/ext/zip/tests/bug40228-mb.phpt
  51. * @dataProvider provideBug40228
  52. * @param string $filename
  53. * @throws ZipException
  54. */
  55. public function testBug40228($filename)
  56. {
  57. $this->assertTrue(mkdir($this->outputDirname, 0755, true));
  58. $zipFile = new ZipFile();
  59. $zipFile->openFile($filename);
  60. $zipFile->extractTo($this->outputDirname);
  61. $zipFile->close();
  62. $this->assertTrue(is_dir($this->outputDirname . '/test/empty'));
  63. }
  64. public function provideBug40228()
  65. {
  66. return [
  67. [__DIR__ . '/php-zip-ext-test-resources/bug40228.zip'],
  68. ];
  69. }
  70. /**
  71. * Bug #49072 (feof never returns true for damaged file in zip)
  72. * @see https://github.com/php/php-src/blob/master/ext/zip/tests/bug49072.phpt
  73. * @expectedException \PhpZip\Exception\Crc32Exception
  74. * @expectedExceptionMessage file1
  75. * @throws ZipException
  76. */
  77. public function testBug49072()
  78. {
  79. $filename = __DIR__ . '/php-zip-ext-test-resources/bug49072.zip';
  80. $zipFile = new ZipFile();
  81. $zipFile->openFile($filename);
  82. $zipFile->getEntryContents('file1');
  83. }
  84. /**
  85. * Bug #70752 (Depacking with wrong password leaves 0 length files)
  86. * @see https://github.com/php/php-src/blob/master/ext/zip/tests/bug70752.phpt
  87. * @expectedException \PhpZip\Exception\ZipAuthenticationException
  88. * @expectedExceptionMessage nvalid password for zip entry "bug70752.txt"
  89. * @throws ZipException
  90. */
  91. public function testBug70752()
  92. {
  93. $filename = __DIR__ . '/php-zip-ext-test-resources/bug70752.zip';
  94. $this->assertTrue(mkdir($this->outputDirname, 0755, true));
  95. $zipFile = new ZipFile();
  96. try {
  97. $zipFile->openFile($filename);
  98. $zipFile->setReadPassword('bar');
  99. $zipFile->extractTo($this->outputDirname);
  100. $this->markTestIncomplete('failed test');
  101. } catch (ZipException $exception) {
  102. $this->assertFalse(file_exists($this->outputDirname . '/bug70752.txt'));
  103. $zipFile->close();
  104. throw $exception;
  105. }
  106. }
  107. /**
  108. * Bug #12414 ( extracting files from damaged archives)
  109. * @see https://github.com/php/php-src/blob/master/ext/zip/tests/pecl12414.phpt
  110. * @throws ZipException
  111. */
  112. public function testPecl12414()
  113. {
  114. $filename = __DIR__ . '/php-zip-ext-test-resources/pecl12414.zip';
  115. $entryName = 'MYLOGOV2.GFX';
  116. $zipFile = new ZipFile();
  117. $zipFile->openFile($filename);
  118. $info = $zipFile->getEntryInfo($entryName);
  119. $this->assertTrue($info->getSize() > 0);
  120. $contents = $zipFile[$entryName];
  121. $this->assertEquals(strlen($contents), $info->getSize());
  122. $zipFile->close();
  123. }
  124. }