summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Watkins <krakjoe@php.net>2016-09-30 07:21:01 +0100
committerJoe Watkins <krakjoe@php.net>2016-09-30 07:21:01 +0100
commita8d031fbd87d2ea5d52de30f1764bf48b9b76c05 (patch)
tree2405fb732757241de04635fa66af94d0a33dd699
parent581e8904839e4e2417028507bb92296e8faac84d (diff)
downloadphp-git-a8d031fbd87d2ea5d52de30f1764bf48b9b76c05.tar.gz
fix user filter bug
-rw-r--r--ext/standard/tests/streams/user_streams_consumed_bug.phpt32
-rw-r--r--ext/standard/user_filters.c2
2 files changed, 33 insertions, 1 deletions
diff --git a/ext/standard/tests/streams/user_streams_consumed_bug.phpt b/ext/standard/tests/streams/user_streams_consumed_bug.phpt
new file mode 100644
index 0000000000..147a7bd0a7
--- /dev/null
+++ b/ext/standard/tests/streams/user_streams_consumed_bug.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Testing user filter on streams
+--FILE--
+<?php
+class Intercept extends php_user_filter
+{
+ public static $cache = '';
+ public function filter($in, $out, &$consumed, $closing)
+ {
+ while ($bucket = stream_bucket_make_writeable($in)) {
+ self::$cache .= $bucket->data;
+ $consumed += $bucket->datalen;
+ stream_bucket_append($out, $bucket);
+ }
+ return PSFS_PASS_ON;
+ }
+}
+
+$out = fwrite(STDOUT, "Hello\n");
+var_dump($out);
+
+stream_filter_register("intercept_filter", "Intercept");
+stream_filter_append(STDOUT, "intercept_filter");
+
+$out = fwrite(STDOUT, "Goodbye\n");
+var_dump($out);
+--EXPECTF--
+Hello
+int(6)
+Goodbye
+int(8)
+
diff --git a/ext/standard/user_filters.c b/ext/standard/user_filters.c
index 4434fd1f0d..e65148a2df 100644
--- a/ext/standard/user_filters.c
+++ b/ext/standard/user_filters.c
@@ -217,7 +217,7 @@ php_stream_filter_status_t userfilter_filter(
}
if (bytes_consumed) {
- *bytes_consumed = Z_LVAL_P(&args[2]);
+ *bytes_consumed = zval_get_long(&args[2]);
}
if (buckets_in->head) {