Set error on unexpected nesting of multi bulks

This commit is contained in:
Pieter Noordhuis 2010-11-24 15:46:05 +01:00
parent d4058be7b0
commit 257a9d40a9
2 changed files with 18 additions and 0 deletions

View File

@ -294,6 +294,13 @@ static int processMultiBulkItem(redisReader *r) {
long elements; long elements;
int root = 0; int root = 0;
/* Set error for nested multi bulks with depth > 1 */
if (r->ridx == 2) {
redisSetReplyReaderError(r,sdscatprintf(sdsempty(),
"No support for nested multi bulk replies with depth > 1"));
return -1;
}
if ((p = readLine(r,NULL)) != NULL) { if ((p = readLine(r,NULL)) != NULL) {
elements = strtol(p,NULL,10); elements = strtol(p,NULL,10);
root = (r->ridx == 0); root = (r->ridx == 0);

11
test.c
View File

@ -256,6 +256,17 @@ static void test_reply_reader() {
strcasecmp(err,"Protocol error, got \"@\" as reply type byte") == 0); strcasecmp(err,"Protocol error, got \"@\" as reply type byte") == 0);
redisReplyReaderFree(reader); redisReplyReaderFree(reader);
test("Set error on nested multi bulks with depth > 1: ");
reader = redisReplyReaderCreate();
redisReplyReaderFeed(reader,(char*)"*1\r\n",4);
redisReplyReaderFeed(reader,(char*)"*1\r\n",4);
redisReplyReaderFeed(reader,(char*)"*1\r\n",4);
ret = redisReplyReaderGetReply(reader,NULL);
err = redisReplyReaderGetError(reader);
test_cond(ret == REDIS_ERR &&
strncasecmp(err,"No support for",14) == 0);
redisReplyReaderFree(reader);
test("Works with NULL functions for reply: "); test("Works with NULL functions for reply: ");
reader = redisReplyReaderCreate(); reader = redisReplyReaderCreate();
redisReplyReaderSetReplyObjectFunctions(reader,NULL); redisReplyReaderSetReplyObjectFunctions(reader,NULL);