}
class test_filter3 extends php_user_filter {
function filter($in, $out, &$consumed, $closing) {
- $bucket = stream_bucket_new($this->stream, "42");
- stream_bucket_append($out, $bucket);
+ if (!$closing) {
+ $bucket = stream_bucket_new($this->stream, "42");
+ stream_bucket_append($out, $bucket);
+ }
return PSFS_ERR_FATAL;
}
}
class test_filter4 extends php_user_filter {
function filter($in, $out, &$consumed, $closing) {
- $bucket = stream_bucket_new($this->stream, "42");
+ if (!$closing) {
+ $bucket = stream_bucket_new($this->stream, "42");
+ }
return PSFS_ERR_FATAL;
}
}
filter_errors_test("test_filter$i", "42");
}
+echo "test append / read / remove\n";
+for($i = 0; $i < 5; ++$i) {
+ echo "test_filter$i\n";
+ $stream = fopen('php://memory', 'wb+');
+ fwrite($stream, b"42");
+ fseek($stream, 0, SEEK_SET);
+ $f = stream_filter_append($stream, "test_filter$i");
+ stream_get_contents($stream);
+ stream_filter_remove($f);
+}
+
+echo "test append all / read / remove all\n";
+$stream = fopen('php://memory', 'wb+');
+fwrite($stream, b"42");
+fseek($stream, 0, SEEK_SET);
+$filters = array();
+for($i = 0; $i < 5; ++$i) {
+ echo "test_filter$i\n";
+ $filters[] = stream_filter_append($stream, "test_filter$i");
+}
+stream_get_contents($stream);
+foreach($filters as $filter) {
+ stream_filter_remove($filter);
+}
+
+echo "test append all / read / close\n";
+$stream = fopen('php://memory', 'wb+');
+fwrite($stream, b"42");
+fseek($stream, 0, SEEK_SET);
+$filters = array();
+for($i = 0; $i < 5; ++$i) {
+ echo "test_filter$i\n";
+ $filters[] = stream_filter_append($stream, "test_filter$i");
+}
+stream_get_contents($stream);
+fclose($stream);
+
?>
--EXPECTF--
test_filter0
Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
test filtering of non buffered data
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
test_filter1
bool(true)
test filtering of buffered data
Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
test filtering of non buffered data
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
test_filter4
bool(true)
test filtering of buffered data
Warning: stream_filter_append(): Filter failed to process pre-buffered data in %s
test filtering of non buffered data
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+test append / read / remove
+test_filter0
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test_filter1
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test_filter2
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test_filter3
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test_filter4
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test append all / read / remove all
+test_filter0
+test_filter1
+test_filter2
+test_filter3
+test_filter4
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+
+Warning: stream_filter_remove(): Unable to flush filter, not removing in %s
+test append all / read / close
+test_filter0
+test_filter1
+test_filter2
+test_filter3
+test_filter4
+
+Warning: stream_get_contents(): Unprocessed filter buckets remaining on input brigade in %s