diff --git a/hiredis.c b/hiredis.c index 4247b8220..ac5c3e33c 100644 --- a/hiredis.c +++ b/hiredis.c @@ -446,10 +446,10 @@ static int processMultiBulkItem(redisReader *r) { long elements; int root = 0; - /* Set error for nested multi bulks with depth > 1 */ - if (r->ridx == 2) { + /* Set error for nested multi bulks with depth > 2 */ + if (r->ridx == 3) { __redisReaderSetError(r,REDIS_ERR_PROTOCOL, - "No support for nested multi bulk replies with depth > 1"); + "No support for nested multi bulk replies with depth > 2"); return REDIS_ERR; } diff --git a/hiredis.h b/hiredis.h index 3c3491cac..835837548 100644 --- a/hiredis.h +++ b/hiredis.h @@ -123,7 +123,7 @@ typedef struct redisReader { size_t pos; /* Buffer cursor */ size_t len; /* Buffer length */ - redisReadTask rstack[3]; + redisReadTask rstack[4]; int ridx; /* Index of current read task */ void *reply; /* Temporary reply pointer */ diff --git a/test.c b/test.c index 0dde6860a..ca98f9b98 100644 --- a/test.c +++ b/test.c @@ -225,11 +225,12 @@ static void test_reply_reader(void) { strcasecmp(reader->errstr,"Protocol error, got \"@\" as reply type byte") == 0); redisReaderFree(reader); - test("Set error on nested multi bulks with depth > 1: "); + test("Set error on nested multi bulks with depth > 2: "); reader = redisReaderCreate(); redisReaderFeed(reader,(char*)"*1\r\n",4); redisReaderFeed(reader,(char*)"*1\r\n",4); redisReaderFeed(reader,(char*)"*1\r\n",4); + redisReaderFeed(reader,(char*)"*1\r\n",4); ret = redisReaderGetReply(reader,NULL); test_cond(ret == REDIS_ERR && strncasecmp(reader->errstr,"No support for",14) == 0);