From 1e2cb190b65f92bbfbd8160c2bafe37be546a5f4 Mon Sep 17 00:00:00 2001 From: liudaixiao Date: Mon, 16 Dec 2019 09:10:28 +0800 Subject: [PATCH] patch_bug_78902 --- main/streams/streams.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/main/streams/streams.c b/main/streams/streams.c index 70b36be256f4b..35d8b64f81286 100644 --- a/main/streams/streams.c +++ b/main/streams/streams.c @@ -588,6 +588,14 @@ PHPAPI int _php_stream_fill_read_buffer(php_stream *stream, size_t size) * stream read buffer */ while (brig_inp->head) { bucket = brig_inp->head; + /* reduce buffer memory consumption if possible, to avoid a realloc */ + if (stream->readbuf && stream->readbuflen - stream->writepos < bucket->buflen) { + if (stream->writepos > stream->readpos) { + memmove(stream->readbuf, stream->readbuf + stream->readpos, stream->writepos - stream->readpos); + } + stream->writepos -= stream->readpos; + stream->readpos = 0; + } /* grow buffer to hold this bucket * TODO: this can fail for persistent streams */ if (stream->readbuflen - stream->writepos < bucket->buflen) {