Fixed ZINCR Nan bugs leading to server crash and added tests

This commit is contained in:
antirez
2010-05-28 12:24:47 +02:00
parent 329cdba00a
commit d1481e023a
2 changed files with 33 additions and 0 deletions

14
redis.c
View File

@ -5710,6 +5710,11 @@ static void zaddGenericCommand(redisClient *c, robj *key, robj *ele, double scor
zset *zs;
double *score;
if (isnan(scoreval)) {
addReplySds(c,sdsnew("-ERR provide score is Not A Number (nan)\r\n"));
return;
}
zsetobj = lookupKeyWrite(c->db,key);
if (zsetobj == NULL) {
zsetobj = createZsetObject();
@ -5738,6 +5743,15 @@ static void zaddGenericCommand(redisClient *c, robj *key, robj *ele, double scor
} else {
*score = scoreval;
}
if (isnan(*score)) {
addReplySds(c,
sdsnew("-ERR resulting score is Not A Number (nan)\r\n"));
zfree(score);
/* Note that we don't need to check if the zset may be empty and
* should be removed here, as we can only obtain Nan as score if
* there was already an element in the sorted set. */
return;
}
} else {
*score = scoreval;
}