]> granicus.if.org Git - curl/commit
parsedate: avoid integer overflow
authorEric Lubin <eric@lubin.us>
Wed, 11 Dec 2013 04:01:07 +0000 (20:01 -0800)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 11 Dec 2013 15:32:21 +0000 (16:32 +0100)
commit7246dffff5c7d046c7558ca6bf35781a2fe58ee9
tree0e20082a52a52eba1110ee0597853207e67a4008
parent41d21e460fc0455c01577ea5d88d89fdfe216a10
parsedate: avoid integer overflow

In C, signed integer overflow is undefined behavior. Thus, the compiler
is allowed to assume that it will not occur. In the check for an
overflow, the developer assumes that the signed integer of type time_t
will wrap around if it overflows. However, this behavior is undefined in
the C standard. Thus, when the compiler sees this, it simplifies t +
delta < t to delta < 0. Since delta > 0 and delta < 0 can't both be
true, the entire if statement is optimized out under certain
optimization levels. Thus, the parsedate function would return
PARSEDATE_OK with an undefined value in the time, instead of return -1 =
PARSEDATE_FAIL.
lib/parsedate.c