diff --git a/src/networking.c b/src/networking.c index 77c37af873e7db7c19b8a76066c972ceabbae111..e2cbf9ad876e74d507c8caf433bb29ef0a1045c8 100644 --- a/src/networking.c +++ b/src/networking.c @@ -29,6 +29,7 @@ #include "redis.h" #include +#include static void setProtocolError(redisClient *c, int pos); @@ -415,9 +416,15 @@ void setDeferredMultiBulkLength(redisClient *c, void *node, long length) { void addReplyDouble(redisClient *c, double d) { char dbuf[128], sbuf[128]; int dlen, slen; - dlen = snprintf(dbuf,sizeof(dbuf),"%.17g",d); - slen = snprintf(sbuf,sizeof(sbuf),"$%d\r\n%s\r\n",dlen,dbuf); - addReplyString(c,sbuf,slen); + if (isinf(d)) { + /* Libc in odd systems (Hi Solaris!) will format infinite in a + * different way, so better to handle it in an explicit way. */ + addReplyBulkCString(c, d > 0 ? "inf" : "-inf"); + } else { + dlen = snprintf(dbuf,sizeof(dbuf),"%.17g",d); + slen = snprintf(sbuf,sizeof(sbuf),"$%d\r\n%s\r\n",dlen,dbuf); + addReplyString(c,sbuf,slen); + } } /* Add a long long as integer reply or bulk len / multi bulk count.