From e29e426b4368b68f23c5b6f78b072d1126824653 Mon Sep 17 00:00:00 2001 From: antirez Date: Tue, 27 Aug 2013 13:00:06 +0200 Subject: [PATCH] Fix an hypothetical issue in processMultibulkBuffer(). --- src/networking.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/networking.c b/src/networking.c index d0d0430c0..23ef11dc8 100644 --- a/src/networking.c +++ b/src/networking.c @@ -987,15 +987,19 @@ int processMultibulkBuffer(redisClient *c) { pos += newline-(c->querybuf+pos)+2; if (ll >= REDIS_MBULK_BIG_ARG) { + size_t qblen; + /* If we are going to read a large object from network * try to make it likely that it will start at c->querybuf * boundary so that we can optimize object creation * avoiding a large copy of data. */ sdsrange(c->querybuf,pos,-1); pos = 0; + qblen = sdslen(c->querybuf); /* Hint the sds library about the amount of bytes this string is * going to contain. */ - c->querybuf = sdsMakeRoomFor(c->querybuf,ll+2-sdslen(c->querybuf)); + if (qblen < ll+2) + c->querybuf = sdsMakeRoomFor(c->querybuf,ll+2-qblen); } c->bulklen = ll; } -- GitLab