Improve overflow check of expire time (#8519)
When milliseconds == LLONG_MAX / 1000, *1000 will not overflow.
This commit is contained in:
parent
f8fed5ffd1
commit
0fd1fb59f2
@ -78,7 +78,7 @@ void setGenericCommand(client *c, int flags, robj *key, robj *val, robj *expire,
|
|||||||
if (expire) {
|
if (expire) {
|
||||||
if (getLongLongFromObjectOrReply(c, expire, &milliseconds, NULL) != C_OK)
|
if (getLongLongFromObjectOrReply(c, expire, &milliseconds, NULL) != C_OK)
|
||||||
return;
|
return;
|
||||||
if (milliseconds <= 0 || (unit == UNIT_SECONDS && milliseconds >= LLONG_MAX / 1000)) {
|
if (milliseconds <= 0 || (unit == UNIT_SECONDS && milliseconds > LLONG_MAX / 1000)) {
|
||||||
/* Negative value provided or multiplication is gonna overflow. */
|
/* Negative value provided or multiplication is gonna overflow. */
|
||||||
addReplyErrorFormat(c, "invalid expire time in %s", c->cmd->name);
|
addReplyErrorFormat(c, "invalid expire time in %s", c->cmd->name);
|
||||||
return;
|
return;
|
||||||
@ -344,7 +344,7 @@ void getexCommand(client *c) {
|
|||||||
if (expire) {
|
if (expire) {
|
||||||
if (getLongLongFromObjectOrReply(c, expire, &milliseconds, NULL) != C_OK)
|
if (getLongLongFromObjectOrReply(c, expire, &milliseconds, NULL) != C_OK)
|
||||||
return;
|
return;
|
||||||
if (milliseconds <= 0 || (unit == UNIT_SECONDS && milliseconds >= LLONG_MAX / 1000)) {
|
if (milliseconds <= 0 || (unit == UNIT_SECONDS && milliseconds > LLONG_MAX / 1000)) {
|
||||||
/* Negative value provided or multiplication is gonna overflow. */
|
/* Negative value provided or multiplication is gonna overflow. */
|
||||||
addReplyErrorFormat(c, "invalid expire time in %s", c->cmd->name);
|
addReplyErrorFormat(c, "invalid expire time in %s", c->cmd->name);
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user