diff --git a/ext/standard/tests/filters/bug81302.phpt b/ext/standard/tests/filters/bug81302.phpt new file mode 100644 index 0000000000000..c78ecace125a7 --- /dev/null +++ b/ext/standard/tests/filters/bug81302.phpt @@ -0,0 +1,20 @@ +--TEST-- +Bug #81302 (Stream position after stream filter removed) +--SKIPIF-- + +--FILE-- + +--EXPECT-- +bool(true) diff --git a/main/streams/filter.c b/main/streams/filter.c index a86b6b16d7a88..08cc015cac9d9 100644 --- a/main/streams/filter.c +++ b/main/streams/filter.c @@ -470,7 +470,10 @@ PHPAPI int _php_stream_filter_flush(php_stream_filter *filter, int finish) } else if (chain == &(stream->writefilters)) { /* Send flushed data to the stream */ while ((bucket = inp->head)) { - stream->ops->write(stream, bucket->buf, bucket->buflen); + ssize_t count = stream->ops->write(stream, bucket->buf, bucket->buflen); + if (count > 0) { + stream->position += count; + } php_stream_bucket_unlink(bucket); php_stream_bucket_delref(bucket); }