Unverified Commit 362f2a84 authored by sundb's avatar sundb Committed by GitHub
Browse files

Improve overflow check of expire time (#8519)

When milliseconds == LLONG_MAX / 1000, *1000 will not overflow.
parent d828f90c
...@@ -78,7 +78,7 @@ void setGenericCommand(client *c, int flags, robj *key, robj *val, robj *expire, ...@@ -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) { ...@@ -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;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment