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();
} 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;
}
}
set _ $err
} {}
+
+ test {ZSET element can't be set to nan with ZADD} {
+ set e {}
+ catch {r zadd myzset nan abc} e
+ set _ $e
+ } {*Not A Number*}
+
+ test {ZSET element can't be set to nan with ZINCRBY} {
+ set e {}
+ catch {r zincrby myzset nan abc} e
+ set _ $e
+ } {*Not A Number*}
+
+ test {ZINCRBY calls leading to Nan are refused} {
+ set e {}
+ r zincrby myzset +inf abc
+ catch {r zincrby myzset -inf abc} e
+ set _ $e
+ } {*Not A Number*}
}