summaryrefslogtreecommitdiff
path: root/ext/standard/tests/streams/bug79984.phpt
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/tests/streams/bug79984.phpt')
-rw-r--r--ext/standard/tests/streams/bug79984.phpt57
1 files changed, 57 insertions, 0 deletions
diff --git a/ext/standard/tests/streams/bug79984.phpt b/ext/standard/tests/streams/bug79984.phpt
new file mode 100644
index 0000000000..7126458fff
--- /dev/null
+++ b/ext/standard/tests/streams/bug79984.phpt
@@ -0,0 +1,57 @@
+--TEST--
+Bug #79984 (Stream filter is not called with closing arg)
+--FILE--
+<?php
+
+class F extends php_user_filter
+{
+ public function onCreate()
+ {
+ echo 'filter onCreate' . PHP_EOL;
+ return true;
+ }
+
+ public function onClose()
+ {
+ echo 'filter onClose' . PHP_EOL;
+ }
+
+ public function filter($in, $out, &$consumed, $closing)
+ {
+ while ($bucket = stream_bucket_make_writeable($in)) {
+ $bucket->data = strtoupper($bucket->data);
+ $consumed += $bucket->datalen;
+ stream_bucket_append($out, $bucket);
+ }
+ echo 'filtered ' . ($consumed ? $consumed : 0) . ' bytes';
+ if ($closing) {
+ echo ' and closing.';
+ } else {
+ echo '.';
+ }
+ if (feof($this->stream)) {
+ echo ' Stream has reached end-of-file.';
+ }
+ echo PHP_EOL;
+ return PSFS_PASS_ON;
+ }
+}
+
+stream_filter_register('f', 'F');
+
+$str = str_repeat('a', 8320);
+
+$f2 = fopen('php://temp', 'r+b');
+fwrite($f2, $str);
+fseek($f2, 0, SEEK_SET);
+stream_filter_append($f2, 'f', STREAM_FILTER_READ);
+var_dump(strlen(stream_get_contents($f2)));
+fclose($f2);
+
+?>
+--EXPECT--
+filter onCreate
+filtered 8192 bytes.
+filtered 128 bytes and closing.
+int(8320)
+filter onClose