diff --git a/src/networking.c b/src/networking.c index 862e69f4c03fa2f1cbb4f38fb0b4835e87a81b95..f6139f57fa69b09bc1f4222cc87a7559effbbf5e 100644 --- a/src/networking.c +++ b/src/networking.c @@ -833,12 +833,14 @@ void processInputBuffer(redisClient *c) { void readQueryFromClient(aeEventLoop *el, int fd, void *privdata, int mask) { redisClient *c = (redisClient*) privdata; - char buf[REDIS_IOBUF_LEN]; int nread; + size_t qblen; REDIS_NOTUSED(el); REDIS_NOTUSED(mask); - nread = read(fd, buf, REDIS_IOBUF_LEN); + qblen = sdslen(c->querybuf); + c->querybuf = sdsMakeRoomFor(c->querybuf, REDIS_IOBUF_LEN); + nread = read(fd, c->querybuf+qblen, REDIS_IOBUF_LEN); if (nread == -1) { if (errno == EAGAIN) { nread = 0; @@ -853,7 +855,7 @@ void readQueryFromClient(aeEventLoop *el, int fd, void *privdata, int mask) { return; } if (nread) { - c->querybuf = sdscatlen(c->querybuf,buf,nread); + sdsIncrLen(c->querybuf,nread); c->lastinteraction = time(NULL); } else { return;