From b3171064fd87accf0d1ac024c5001f913716626d Mon Sep 17 00:00:00 2001 From: Wez Furlong Date: Fri, 23 May 2003 11:10:34 +0000 Subject: [PATCH] Fix Bug #23770: Odd output from file_get_contents(). php_stream_copy_to_mem couldn't handle the case when the read returned less than chunk_size/4 bytes (except when it was the last chunk read). --- main/streams.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/main/streams.c b/main/streams.c index 4d68335eae..62b77b79b4 100755 --- a/main/streams.c +++ b/main/streams.c @@ -545,10 +545,10 @@ PHPAPI php_stream_filter *php_stream_filter_remove(php_stream *stream, php_strea static void php_stream_fill_read_buffer(php_stream *stream, size_t size TSRMLS_DC) { /* allocate/fill the buffer */ - + size_t justread = 0; + /* is there enough data in the buffer ? */ if (stream->writepos - stream->readpos < (off_t)size) { - size_t justread = 0; /* ignore eof here; the underlying state might have changed */ @@ -583,13 +583,12 @@ static void php_stream_fill_read_buffer(php_stream *stream, size_t size TSRMLS_D stream->writepos += justread; } } - } PHPAPI size_t _php_stream_read(php_stream *stream, char *buf, size_t size TSRMLS_DC) { size_t toread = 0, didread = 0; - + while (size > 0) { /* take from the read buffer first. @@ -1185,13 +1184,15 @@ PHPAPI size_t _php_stream_copy_to_mem(php_stream *src, char **buf, size_t maxlen } ptr = *buf = pemalloc_rel_orig(max_len, persistent); - + while((ret = php_stream_read(src, ptr, max_len - len))) { len += ret; if (len + min_room >= max_len) { *buf = perealloc_rel_orig(*buf, max_len + step, persistent); max_len += step; ptr = *buf + len; + } else { + ptr += ret; } } if (len) { -- 2.40.0