diff --git a/ext/standard/tests/streams/bug48725_generic.phpt b/ext/standard/tests/streams/bug48725_generic.phpt new file mode 100644 index 0000000000000..a09243a5c8f94 --- /dev/null +++ b/ext/standard/tests/streams/bug48725_generic.phpt @@ -0,0 +1,29 @@ +--TEST-- +Bug #48725 (Support for flushing in zlib stream, more generic issue) +--FILE-- +datalen; + stream_bucket_append($out, $bucket); + } + return PSFS_PASS_ON; + } +} + +stream_filter_register('debug.closing', 'DebugClosingFilter'); + +$stream = fopen('data://text/plain;base64,' . base64_encode('Foo bar baz'), 'r'); +stream_filter_append($stream, 'debug.closing', STREAM_FILTER_READ); +$stream_contents = stream_get_contents($stream); +print $stream_contents . PHP_EOL; +?> +===DONE=== +--EXPECT-- +Closing +Foo bar baz +===DONE=== diff --git a/ext/zlib/tests/bug48725.phpt b/ext/zlib/tests/bug48725.phpt new file mode 100644 index 0000000000000..e4a4cc9bdf86f --- /dev/null +++ b/ext/zlib/tests/bug48725.phpt @@ -0,0 +1,14 @@ +--TEST-- +Bug #48725 (Support for flushing in zlib stream) +--SKIPIF-- + +--FILE-- + +===DONE=== +--EXPECT-- +73cbcf57484a2c02e22a00 +===DONE=== diff --git a/main/streams/streams.c b/main/streams/streams.c index 3cf0c7ec97b86..8572daf4a1e0f 100644 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -528,6 +528,7 @@ PHPAPI void _php_stream_fill_read_buffer(php_stream *stream, size_t size) if (stream->readfilters.head) { char *chunk_buf; int err_flag = 0; + size_t justread = 0; php_stream_bucket_brigade brig_in = { NULL, NULL }, brig_out = { NULL, NULL }; php_stream_bucket_brigade *brig_inp = &brig_in, *brig_outp = &brig_out, *brig_swap; @@ -538,8 +539,7 @@ PHPAPI void _php_stream_fill_read_buffer(php_stream *stream, size_t size) /* allocate a buffer for reading chunks */ chunk_buf = emalloc(stream->chunk_size); - while (!stream->eof && !err_flag && (stream->writepos - stream->readpos < (zend_off_t)size)) { - size_t justread = 0; + while ((justread != 0 || !stream->eof) && !err_flag && (stream->writepos - stream->readpos < (zend_off_t)size)) { int flags; php_stream_bucket *bucket; php_stream_filter_status_t status = PSFS_ERR_FATAL;