summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorBob Weinand <bobwei9@hotmail.com>2015-01-26 22:53:36 +0100
committerBob Weinand <bobwei9@hotmail.com>2015-01-26 22:53:36 +0100
commit5845f2c0c116accac6bdd60a6b35ff05aa604ca5 (patch)
tree925045943e5a21bc0ca95315cd33fdc6f73b74e1 /ext
parent5f3dbab0fa67fac449e6139e3e38f942e3ef979a (diff)
parent666cb333f725794892df7876889472aeee8e33fe (diff)
downloadphp-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.phpt56
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)