summaryrefslogtreecommitdiff
path: root/memcached.c
diff options
context:
space:
mode:
Diffstat (limited to 'memcached.c')
-rw-r--r--memcached.c6
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)) {