diff options
-rw-r--r-- | memcached.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/memcached.c b/memcached.c index e0bbf89..e47920f 100644 --- a/memcached.c +++ b/memcached.c @@ -2737,6 +2737,12 @@ static void process_update_command(conn *c, token_t *tokens, const size_t ntoken /* Ubuntu 8.04 breaks when I pass exptime to safe_strtol */ exptime = exptime_int; + /* Negative exptimes can underflow and end up immortal. realtime() will + immediately expire values that are greater than REALTIME_MAXDELTA, but less + than process_started, so lets aim for that. */ + if (exptime < 0) + exptime = REALTIME_MAXDELTA + 1; + // does cas value exist? if (handle_cas) { if (!safe_strtoull(tokens[5].value, &req_cas_id)) { |