diff options
author | Joe Watkins <krakjoe@php.net> | 2016-09-30 07:21:01 +0100 |
---|---|---|
committer | Joe Watkins <krakjoe@php.net> | 2016-09-30 07:21:01 +0100 |
commit | a8d031fbd87d2ea5d52de30f1764bf48b9b76c05 (patch) | |
tree | 2405fb732757241de04635fa66af94d0a33dd699 | |
parent | 581e8904839e4e2417028507bb92296e8faac84d (diff) | |
download | php-git-a8d031fbd87d2ea5d52de30f1764bf48b9b76c05.tar.gz |
fix user filter bug
-rw-r--r-- | ext/standard/tests/streams/user_streams_consumed_bug.phpt | 32 | ||||
-rw-r--r-- | ext/standard/user_filters.c | 2 |
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) { |