diff options
author | Sara Golemon <pollita@php.net> | 2017-11-13 13:35:46 -0500 |
---|---|---|
committer | Sara Golemon <pollita@php.net> | 2017-11-13 13:35:46 -0500 |
commit | fd463cfbad66c962d25647211602c69303369206 (patch) | |
tree | 8a4ed21ee79f650e96b4576dbef814daccc4ba5c | |
parent | bdf77f02f637bc0efbb55a800be1860279cc5b3e (diff) | |
parent | 0a45e8f096a04464bda6277c6f3d0b5461737a27 (diff) | |
download | php-git-fd463cfbad66c962d25647211602c69303369206.tar.gz |
Merge branch 'PHP-7.2'
* PHP-7.2:
Bugfix#75515 php://streams behaving greedily
-rw-r--r-- | ext/standard/tests/streams/stream_set_chunk_size.phpt | 10 | ||||
-rw-r--r-- | main/streams/streams.c | 7 |
2 files changed, 9 insertions, 8 deletions
diff --git a/ext/standard/tests/streams/stream_set_chunk_size.phpt b/ext/standard/tests/streams/stream_set_chunk_size.phpt index 88f4897e93..ce272519c4 100644 --- a/ext/standard/tests/streams/stream_set_chunk_size.phpt +++ b/ext/standard/tests/streams/stream_set_chunk_size.phpt @@ -39,7 +39,7 @@ var_dump(fwrite($f, str_repeat('b', 3))); echo "should return previous chunk size (1)\n"; var_dump(stream_set_chunk_size($f, 100)); -echo "should elicit 3 reads of size 100 (chunk size)\n"; +echo "should elicit one read of size 100 (chunk size)\n"; var_dump(strlen(fread($f, 250))); echo "should elicit one read of size 100 (chunk size)\n"; var_dump(strlen(fread($f, 50))); @@ -67,15 +67,13 @@ write with size: 1 int(3) should return previous chunk size (1) int(1) -should elicit 3 reads of size 100 (chunk size) -read with size: 100 -read with size: 100 +should elicit one read of size 100 (chunk size) read with size: 100 -int(250) +int(100) should elicit one read of size 100 (chunk size) +read with size: 100 int(50) should elicit no read because there is sufficient cached data -read with size: 100 int(50) should elicit 2 writes of size 100 and one of size 50 write with size: 100 diff --git a/main/streams/streams.c b/main/streams/streams.c index ec6cf21807..5f8acfde69 100644 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -24,6 +24,7 @@ #define _GNU_SOURCE #include "php.h" #include "php_globals.h" +#include "php_memory_streams.h" #include "php_network.h" #include "php_open_temporary_file.h" #include "ext/standard/file.h" @@ -704,8 +705,10 @@ PHPAPI size_t _php_stream_read(php_stream *stream, char *buf, size_t size) break; } - /* just break anyway, to avoid greedy read */ - if (!stream->wrapper || stream->wrapper->is_url) { + /* just break anyway, to avoid greedy read for file://, php://memory, and php://temp */ + if ((stream->wrapper != &php_plain_files_wrapper) && + (stream->ops != &php_stream_memory_ops) && + (stream->ops != &php_stream_temp_ops)) { break; } } |