diff options
-rwxr-xr-x | main/streams/streams.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/main/streams/streams.c b/main/streams/streams.c index a7c65dde57..fc5a0b82ee 100755 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -1211,6 +1211,17 @@ PHPAPI size_t _php_stream_copy_to_mem(php_stream *src, char **buf, size_t maxlen } } + if (maxlen > 0) { + ptr = *buf = pemalloc_rel_orig(maxlen + 1, persistent); + while ((len < maxlen) & !php_stream_eof(src)) { + ret = php_stream_read(src, ptr, maxlen - len); + len += ret; + ptr += ret; + } + *ptr = '\0'; + return len; + } + /* avoid many reallocs by allocating a good sized chunk to begin with, if * we can. Note that the stream may be filtered, in which case the stat * result may be inaccurate, as the filter may inflate or deflate the |