1--TEST--
2Filter errors: user filter
3--FILE--
4<?php
5require 'filter_errors.inc';
6
7class test_filter0 extends php_user_filter {
8	function filter($in, $out, &$consumed, $closing) {
9		return PSFS_ERR_FATAL;
10	}
11}
12class test_filter1 extends php_user_filter {
13	function filter($in, $out, &$consumed, $closing) {
14		$bucket = stream_bucket_make_writeable($in);
15		return PSFS_ERR_FATAL;
16	}
17}
18class test_filter2 extends php_user_filter {
19	function filter($in, $out, &$consumed, $closing) {
20		while ($bucket = stream_bucket_make_writeable($in)) {
21			$consumed += $bucket->datalen;
22			stream_bucket_append($out, $bucket);
23		}
24		return PSFS_ERR_FATAL;
25	}
26}
27class test_filter3 extends php_user_filter {
28	function filter($in, $out, &$consumed, $closing) {
29		if (!$closing) {
30			$bucket = stream_bucket_new($this->stream, "42");
31			stream_bucket_append($out, $bucket);
32		}
33		return PSFS_ERR_FATAL;
34	}
35}
36class test_filter4 extends php_user_filter {
37	function filter($in, $out, &$consumed, $closing) {
38		if (!$closing) {
39			$bucket = stream_bucket_new($this->stream, "42");
40		}
41		return PSFS_ERR_FATAL;
42	}
43}
44
45for($i = 0; $i < 5; ++$i) {
46	echo "test_filter$i\n";
47	var_dump(stream_filter_register("test_filter$i", "test_filter$i"));
48	filter_errors_test("test_filter$i", "42");
49}
50
51echo "test append / read / remove\n";
52for($i = 0; $i < 5; ++$i) {
53	echo "test_filter$i\n";
54	$stream = fopen('php://memory', 'wb+');
55	fwrite($stream, b"42");
56	fseek($stream, 0, SEEK_SET);
57	$f = stream_filter_append($stream, "test_filter$i");
58	stream_get_contents($stream);
59	stream_filter_remove($f);
60}
61
62echo "test append all / read / remove all\n";
63$stream = fopen('php://memory', 'wb+');
64fwrite($stream, b"42");
65fseek($stream, 0, SEEK_SET);
66$filters = array();
67for($i = 0; $i < 5; ++$i) {
68	echo "test_filter$i\n";
69	$filters[] = stream_filter_append($stream, "test_filter$i");
70}
71stream_get_contents($stream);
72foreach($filters as $filter) {
73	stream_filter_remove($filter);
74}
75
76echo "test append all / read / close\n";
77$stream = fopen('php://memory', 'wb+');
78fwrite($stream, b"42");
79fseek($stream, 0, SEEK_SET);
80$filters = array();
81for($i = 0; $i < 5; ++$i) {
82	echo "test_filter$i\n";
83	$filters[] = stream_filter_append($stream, "test_filter$i");
84}
85stream_get_contents($stream);
86fclose($stream);
87
88?>
89--EXPECTF--
90test_filter0
91bool(true)
92test filtering of buffered data
93
94Warning: stream_filter_append(): Unprocessed filter buckets remaining on input brigade in %s
95
96Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
97test filtering of non buffered data
98
99Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
100test_filter1
101bool(true)
102test filtering of buffered data
103
104Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
105test filtering of non buffered data
106test_filter2
107bool(true)
108test filtering of buffered data
109
110Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
111test filtering of non buffered data
112test_filter3
113bool(true)
114test filtering of buffered data
115
116Warning: stream_filter_append(): Unprocessed filter buckets remaining on input brigade in %s
117
118Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
119test filtering of non buffered data
120
121Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
122test_filter4
123bool(true)
124test filtering of buffered data
125
126Warning: stream_filter_append(): Unprocessed filter buckets remaining on input brigade in %s
127
128Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
129test filtering of non buffered data
130
131Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
132test append / read / remove
133test_filter0
134
135Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
136
137Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
138test_filter1
139
140Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
141test_filter2
142
143Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
144test_filter3
145
146Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
147
148Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
149test_filter4
150
151Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
152
153Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
154test append all / read / remove all
155test_filter0
156test_filter1
157test_filter2
158test_filter3
159test_filter4
160
161Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
162
163Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
164
165Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
166
167Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
168
169Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
170
171Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
172test append all / read / close
173test_filter0
174test_filter1
175test_filter2
176test_filter3
177test_filter4
178
179Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
180