readfile_edgecases.phpt 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. --TEST--
  2. Phar: test edge cases of readfile() function interception
  3. --EXTENSIONS--
  4. phar
  5. --INI--
  6. phar.readonly=0
  7. --FILE--
  8. <?php
  9. Phar::interceptFileFuncs();
  10. $fname = __DIR__ . '/' . basename(__FILE__, '.php') . '.phar.php';
  11. $pname = 'phar://' . $fname;
  12. chdir(__DIR__);
  13. file_put_contents($fname, "blah\n");
  14. file_put_contents("readfile_edgecases.txt", "test\n");
  15. readfile($fname);
  16. unlink($fname);
  17. mkdir($pname . '/oops');
  18. file_put_contents($pname . '/foo/hi', '<?php
  19. readfile("foo/" . basename(__FILE__));
  20. $context = stream_context_create();
  21. readfile("readfile_edgecases.txt");
  22. set_include_path("' . addslashes(__DIR__) . '");
  23. readfile("readfile_edgecases.txt", true);
  24. readfile("./hi", 0, $context);
  25. readfile("../oops");
  26. ?>
  27. ');
  28. include $pname . '/foo/hi';
  29. ?>
  30. --CLEAN--
  31. <?php unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
  32. <?php unlink(__DIR__ . '/readfile_edgecases.txt'); ?>
  33. --EXPECTF--
  34. blah
  35. <?php
  36. readfile("foo/" . basename(__FILE__));
  37. $context = stream_context_create();
  38. readfile("readfile_edgecases.txt");
  39. set_include_path("%stests");
  40. readfile("readfile_edgecases.txt", true);
  41. readfile("./hi", 0, $context);
  42. readfile("../oops");
  43. ?>
  44. test
  45. test
  46. <?php
  47. readfile("foo/" . basename(__FILE__));
  48. $context = stream_context_create();
  49. readfile("readfile_edgecases.txt");
  50. set_include_path("%stests");
  51. readfile("readfile_edgecases.txt", true);
  52. readfile("./hi", 0, $context);
  53. readfile("../oops");
  54. ?>
  55. Warning: readfile(phar://%sreadfile_edgecases.phar.php/oops): Failed to open stream: phar error: path "oops" is a directory in phar://%sreadfile_edgecases.phar.php/foo/hi on line %d