1--TEST--
2local user streams must not be able to open() url's
3--INI--
4allow_url_fopen=1
5allow_url_include=0
6--FILE--
7<?php
8class test {
9    private $data = '<?php echo "Hello World\n";?>';
10	private $pos;
11	private $stream = null;
12
13	function stream_open($path, $mode, $options, &$opened_path)
14	{
15		if (strpos($path, "test2://") === 0) {
16			$this->stream = fopen("test1://".substr($path, 8), $mode);
17			return !empty($this->stream);
18		}
19		if (strchr($mode, 'a'))
20			$this->pos = strlen($this->data);
21		else
22			$this->po = 0;
23
24		return true;
25	}
26
27	function stream_read($count)
28	{
29		if (!empty($this->stream)) {
30			return fread($this->stream, $count);
31		}
32		$ret = substr($this->data, $this->pos, $count);
33		$this->pos += strlen($ret);
34		return $ret;
35	}
36
37	function stream_tell()
38	{
39		if (!empty($this->stream)) {
40			return ftell($this->stream);
41		}
42		return $this->pos;
43	}
44
45	function stream_eof()
46	{
47		if (!empty($this->stream)) {
48			return feof($this->stream);
49		}
50		return $this->pos >= strlen($this->data);
51	}
52
53	function stream_seek($offset, $whence)
54	{
55		if (!empty($this->stream)) {
56			return fseek($this->stream, $offset, $whence);
57		}
58		switch($whence) {
59			case SEEK_SET:
60				if ($offset < $this->data && $offset >= 0) {
61					$this->pos = $offset;
62					return true;
63				} else {
64					return false;
65				}
66				break;
67			case SEEK_CUR:
68				if ($offset >= 0) {
69					$this->pos += $offset;
70					return true;
71				} else {
72					return false;
73				}
74				break;
75			case SEEK_END:
76				if (strlen($this->data) + $offset >= 0) {
77					$this->pos = strlen($this->data) + $offset;
78					return true;
79				} else {
80					return false;
81				}
82				break;
83			default:
84				return false;
85		}
86	}
87
88}
89
90stream_register_wrapper("test1", "test", STREAM_IS_URL);
91stream_register_wrapper("test2", "test");
92echo @file_get_contents("test1://hello"),"\n";
93@include "test1://hello";
94echo @file_get_contents("test2://hello"),"\n";
95include "test2://hello";
96--EXPECTF--
97<?php echo "Hello World\n";?>
98<?php echo "Hello World\n";?>
99
100Warning: fopen(): test1:// wrapper is disabled in the server configuration by allow_url_include=0 in %sinclude_userstream_002.php on line 10
101
102Warning: fopen(test1://hello): failed to open stream: no suitable wrapper could be found in %sinclude_userstream_002.php on line 10
103
104Warning: include(test2://hello): failed to open stream: "test::stream_open" call failed in %sinclude_userstream_002.php on line 89
105
106Warning: include(): Failed opening 'test2://hello' for inclusion (include_path='%s') in %sinclude_userstream_002.php on line 89
107