increase read depth by one, would allow ruby redis client to read from slowlog

This commit is contained in:
mrb 2011-12-02 08:45:13 -05:00
parent 4aa3179332
commit 52a29a124b
3 changed files with 6 additions and 5 deletions

View File

@ -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;
}

View File

@ -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 */

3
test.c
View File

@ -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);