1--TEST--
2Phar: test edge cases of opendir() function interception
3--SKIPIF--
4<?php if (!extension_loaded("phar")) die("skip");?>
5--INI--
6phar.readonly=0
7--FILE--
8<?php
9
10Phar::interceptFileFuncs();
11
12$fname = __DIR__ . '/' . basename(__FILE__, '.php') . '.phar.php';
13$pname = 'phar://' . $fname;
14
15try {
16    opendir(array());
17} catch (TypeError $e) {
18    echo $e->getMessage(), "\n";
19}
20
21mkdir(__DIR__ . '/opendir_edgecases');
22chdir(__DIR__);
23
24$a = opendir('opendir_edgecases');
25
26$arr = array();
27while (false !== ($b = readdir($a))) {
28    $arr[] = $b;
29}
30sort($arr);
31foreach ($arr as $b) {
32    echo "$b\n";
33}
34
35closedir($a);
36
37file_put_contents($pname . '/foo', '<?php
38$context = stream_context_create();
39$a = opendir(".", $context);
40$res = array();
41while (false !== ($b = readdir($a))) {
42$res[] = $b;
43}
44sort($res);
45foreach ($res as $b) {
46echo "$b\n";
47}
48opendir("oops");
49?>');
50
51include $pname . '/foo';
52
53?>
54--CLEAN--
55<?php unlink(__DIR__ . '/' . basename(__FILE__, '.clean.php') . '.phar.php'); ?>
56<?php rmdir(__DIR__ . '/opendir_edgecases');
57--EXPECTF--
58opendir(): Argument #1 ($directory) must be of type string, array given
59.
60..
61foo
62
63Warning: opendir(phar://%sopendir_edgecases.phar.php/oops): Failed to open directory: %s in phar://%sopendir_edgecases.phar.php/foo on line %d
64