diff options
author | Pieter Noordhuis <pcnoordhuis@gmail.com> | 2011-01-27 14:39:34 +0100 |
---|---|---|
committer | Pieter Noordhuis <pcnoordhuis@gmail.com> | 2011-01-27 14:39:34 +0100 |
commit | 663d6d1258b3ef49178ed4120de5c91ecffe2512 (patch) | |
tree | c4a728c661a72a053ea9bc73271b01765f8a6720 | |
parent | 864bce944be1331c70ed353aeb083607c2a31acc (diff) |
Properly reset state after protocol error in reply reader
-rw-r--r-- | hiredis.c | 2 | ||||
-rw-r--r-- | test.c | 9 |
2 files changed, 10 insertions, 1 deletions
@@ -493,7 +493,7 @@ static void redisSetReplyReaderError(redisReader *r, sds err) { if (r->buf != NULL) { sdsfree(r->buf); r->buf = sdsempty(); - r->pos = 0; + r->pos = r->len = 0; } r->ridx = -1; r->error = err; @@ -318,6 +318,15 @@ static void test_reply_reader(void) { ret = redisReplyReaderGetReply(reader,&reply); test_cond(ret == REDIS_OK && reply == (void*)REDIS_REPLY_STATUS); redisReplyReaderFree(reader); + + test("Properly reset state after protocol error: "); + reader = redisReplyReaderCreate(); + redisReplyReaderSetReplyObjectFunctions(reader,NULL); + redisReplyReaderFeed(reader,(char*)"x",1); + ret = redisReplyReaderGetReply(reader,&reply); + assert(ret == REDIS_ERR); + ret = redisReplyReaderGetReply(reader,&reply); + test_cond(ret == REDIS_OK && reply == NULL) } static void test_throughput(void) { |