phar_unlinkarchive.phpt 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. --TEST--
  2. Phar::unlinkArchive()
  3. --EXTENSIONS--
  4. phar
  5. --INI--
  6. phar.require_hash=0
  7. phar.readonly=0
  8. --FILE--
  9. <?php
  10. try {
  11. Phar::unlinkArchive("");
  12. } catch (Exception $e) {
  13. echo $e->getMessage(),"\n";
  14. }
  15. $fname = __DIR__ . '/' . basename(__FILE__, '.php') . '.phar';
  16. $pdname = __DIR__ . '/' . basename(__FILE__, '.php') . '.phar.tar';
  17. try {
  18. Phar::unlinkArchive($fname);
  19. } catch (Exception $e) {
  20. echo $e->getMessage(),"\n";
  21. }
  22. file_put_contents($pdname, 'blahblah');
  23. try {
  24. Phar::unlinkArchive($pdname);
  25. } catch (Exception $e) {
  26. echo $e->getMessage(),"\n";
  27. }
  28. try {
  29. Phar::unlinkArchive(array());
  30. } catch (TypeError $e) {
  31. echo $e->getMessage(), "\n";
  32. }
  33. $pname = 'phar://' . $fname;
  34. $fname2 = __DIR__ . '/' . basename(__FILE__, '.php') . '.phar.zip';
  35. $fname3 = __DIR__ . '/' . basename(__FILE__, '.php') . '.2.phar.zip';
  36. $stub = '<?php echo "first stub\n"; __HALT_COMPILER(); ?>';
  37. $file = $stub;
  38. $files = array();
  39. $files['a'] = 'a';
  40. $files['b'] = 'b';
  41. $files['c'] = 'c';
  42. include 'files/phar_test.inc';
  43. $phar = new Phar($fname);
  44. var_dump($phar->isFileFormat(Phar::ZIP));
  45. var_dump($phar->getStub());
  46. try {
  47. Phar::unlinkArchive($fname);
  48. } catch (Exception $e) {
  49. echo $e->getMessage(),"\n";
  50. }
  51. $phar = $phar->convertToExecutable(Phar::ZIP);
  52. var_dump($phar->isFileFormat(Phar::ZIP));
  53. var_dump($phar->getStub());
  54. copy($fname2, $fname3);
  55. $phar = new Phar($fname3);
  56. var_dump($phar->isFileFormat(Phar::ZIP));
  57. var_dump($phar->getStub());
  58. Phar::unlinkArchive($fname);
  59. var_dump(file_exists($fname));
  60. $phar = new Phar($fname);
  61. var_dump(count($phar));
  62. $phar['evil.php'] = '<?php
  63. try {
  64. Phar::unlinkArchive(Phar::running(false));
  65. } catch (Exception $e) {echo $e->getMessage(),"\n";}
  66. var_dump(Phar::running(false));
  67. include Phar::running(true) . "/another.php";
  68. ?>';
  69. $phar['another.php'] = "hi\n";
  70. unset($phar);
  71. include $pname . '/evil.php';
  72. ?>
  73. --CLEAN--
  74. <?php
  75. unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.phar.tar');
  76. unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.phar');
  77. unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.2.phar.zip');
  78. unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.phar.zip');
  79. __HALT_COMPILER();
  80. ?>
  81. --EXPECTF--
  82. Unknown phar archive ""
  83. Unknown phar archive "%sphar_unlinkarchive.phar"
  84. Unknown phar archive "%sphar_unlinkarchive.phar.tar": internal corruption of phar "%sphar_unlinkarchive.phar.tar" (truncated entry)
  85. Phar::unlinkArchive(): Argument #1 ($filename) must be of type string, array given
  86. bool(false)
  87. string(48) "<?php echo "first stub\n"; __HALT_COMPILER(); ?>"
  88. phar archive "%sphar_unlinkarchive.phar" has open file handles or objects. fclose() all file handles, and unset() all objects prior to calling unlinkArchive()
  89. bool(true)
  90. string(60) "<?php // zip-based phar archive stub file
  91. __HALT_COMPILER();"
  92. bool(true)
  93. string(60) "<?php // zip-based phar archive stub file
  94. __HALT_COMPILER();"
  95. bool(false)
  96. int(0)
  97. phar archive "%sphar_unlinkarchive.phar" cannot be unlinked from within itself
  98. string(%d) "%sphar_unlinkarchive.phar"
  99. hi