diff options
| -rw-r--r-- | read.c | 3 | ||||
| -rw-r--r-- | test.c | 10 | 
2 files changed, 12 insertions, 1 deletions
| @@ -303,7 +303,8 @@ static int processLineItem(redisReader *r) {                  d = INFINITY; /* Positive infinite. */              } else if (len == 4 && strcasecmp(buf,"-inf") == 0) {                  d = -INFINITY; /* Negative infinite. */ -            } else if (len == 3 && strcasecmp(buf,"nan") == 0) { +            } else if ((len == 3 && strcasecmp(buf,"nan") == 0) || +                       (len == 4 && strcasecmp(buf, "-nan") == 0)) {                  d = NAN; /* nan. */              } else {                  d = strtod((char*)buf,&eptr); @@ -684,6 +684,16 @@ static void test_reply_reader(void) {      freeReplyObject(reply);      redisReaderFree(reader); +    test("Correctly parses RESP3 double -Nan: "); +    reader = redisReaderCreate(); +    redisReaderFeed(reader, ",-nan\r\n", 7); +    ret = redisReaderGetReply(reader, &reply); +    test_cond(ret == REDIS_OK && +              ((redisReply*)reply)->type == REDIS_REPLY_DOUBLE && +              isnan(((redisReply*)reply)->dval)); +    freeReplyObject(reply); +    redisReaderFree(reader); +      test("Can parse RESP3 nil: ");      reader = redisReaderCreate();      redisReaderFeed(reader, "_\r\n",3); | 
