From 563b062e37a869dea30b6d95c55c1bbc44bc15dd Mon Sep 17 00:00:00 2001 From: Michael Grunder Date: Fri, 14 Apr 2023 10:08:36 -0700 Subject: Accept -nan per the RESP3 spec recommendation. For reference: https://github.com/redis/redis-specifications/blob/master/protocol/RESP3.md --- read.c | 3 ++- test.c | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/read.c b/read.c index 8e6d21b..9c8f869 100644 --- a/read.c +++ b/read.c @@ -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); diff --git a/test.c b/test.c index c1065ff..77e7f1a 100644 --- a/test.c +++ b/test.c @@ -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); -- cgit v1.2.3