diff options
| author | Bob Weinand <bobwei9@hotmail.com> | 2015-01-26 22:53:36 +0100 |
|---|---|---|
| committer | Bob Weinand <bobwei9@hotmail.com> | 2015-01-26 22:53:36 +0100 |
| commit | 5845f2c0c116accac6bdd60a6b35ff05aa604ca5 (patch) | |
| tree | 925045943e5a21bc0ca95315cd33fdc6f73b74e1 /ext | |
| parent | 5f3dbab0fa67fac449e6139e3e38f942e3ef979a (diff) | |
| parent | 666cb333f725794892df7876889472aeee8e33fe (diff) | |
| download | php-git-5845f2c0c116accac6bdd60a6b35ff05aa604ca5.tar.gz | |
Merge branch 'PHP-5.6'
Conflicts:
NEWS
main/streams/filter.c
Diffstat (limited to 'ext')
| -rw-r--r-- | ext/standard/tests/streams/stream_multi_filters_close.phpt | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/ext/standard/tests/streams/stream_multi_filters_close.phpt b/ext/standard/tests/streams/stream_multi_filters_close.phpt new file mode 100644 index 0000000000..f1eb18a15c --- /dev/null +++ b/ext/standard/tests/streams/stream_multi_filters_close.phpt @@ -0,0 +1,56 @@ +--TEST-- +Check if multiple filters are closed correctly and never called again after close +--FILE-- +<?php + +class FirstFilter extends php_user_filter { + public function filter($in, $out, &$consumed, $closing) { + static $closed = 0; + + while ($bucket = stream_bucket_make_writeable($in)) { + stream_bucket_append($out, stream_bucket_new($this->stream, $bucket->data)); + } + + if ($closing) { + $closed++; + } + + if ($closed > 0) { + var_dump($closed++); + } + return PSFS_PASS_ON; + } +} + +class SecondFilter extends php_user_filter { + public function filter($in, $out, &$consumed, $closing) { + static $closed = 0; + + while ($bucket = stream_bucket_make_writeable($in)) { + stream_bucket_append($out, stream_bucket_new($this->stream, $bucket->data)); + } + + if ($closing) { + $closed++; + } + + if ($closed > 0) { + var_dump($closed++); + } + return PSFS_PASS_ON; + } +} + +$r = fopen("php://stdout", "w+"); +stream_filter_register("first", "FirstFilter"); +stream_filter_register("second", "SecondFilter"); +$first = stream_filter_prepend($r, "first", STREAM_FILTER_WRITE, []); +$second = stream_filter_prepend($r, "second", STREAM_FILTER_WRITE, []); +fwrite($r, "test\n"); +stream_filter_remove($second); +stream_filter_remove($first); +?> +--EXPECT-- +test +int(1) +int(1) |
