Now HINCRBY can detect overflows too. Fix for issue #330.
This commit is contained in:
parent
6e09ad1c15
commit
a400a9b2d7
@ -320,7 +320,7 @@ void hmsetCommand(redisClient *c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void hincrbyCommand(redisClient *c) {
|
void hincrbyCommand(redisClient *c) {
|
||||||
long long value, incr;
|
long long value, incr, oldvalue;
|
||||||
robj *o, *current, *new;
|
robj *o, *current, *new;
|
||||||
|
|
||||||
if (getLongLongFromObjectOrReply(c,c->argv[3],&incr,NULL) != REDIS_OK) return;
|
if (getLongLongFromObjectOrReply(c,c->argv[3],&incr,NULL) != REDIS_OK) return;
|
||||||
@ -336,7 +336,12 @@ void hincrbyCommand(redisClient *c) {
|
|||||||
value = 0;
|
value = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
oldvalue = value;
|
||||||
value += incr;
|
value += incr;
|
||||||
|
if ((incr < 0 && value > oldvalue) || (incr > 0 && value < oldvalue)) {
|
||||||
|
addReplyError(c,"increment or decrement would overflow");
|
||||||
|
return;
|
||||||
|
}
|
||||||
new = createStringObjectFromLongLong(value);
|
new = createStringObjectFromLongLong(value);
|
||||||
hashTypeTryObjectEncoding(o,&c->argv[2],NULL);
|
hashTypeTryObjectEncoding(o,&c->argv[2],NULL);
|
||||||
hashTypeSet(o,c->argv[2],new);
|
hashTypeSet(o,c->argv[2],new);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user