summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--main/network.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/main/network.c b/main/network.c
index e5bbbca57b..d8a69ebd67 100644
--- a/main/network.c
+++ b/main/network.c
@@ -633,6 +633,14 @@ static size_t php_sock_stream_read_internal(php_stream *stream, php_netstream_da
#endif
nr_bytes = recv(sock->socket, buf, sock->chunk_size, 0);
if(nr_bytes > 0) {
+
+ /* try to avoid ever expanding buffer */
+ if (sock->readpos > 0) {
+ memmove(sock->readbuf, READPTR(sock), sock->readbuflen - sock->readpos);
+ sock->writepos -= sock->readpos;
+ sock->readpos = 0;
+ }
+
if(sock->writepos + nr_bytes > sock->readbuflen) {
sock->readbuflen += sock->chunk_size;
sock->readbuf = perealloc(sock->readbuf, sock->readbuflen,