• David 'Digit' Turner's avatar
    Fix an infinite loop in time2sub. · 833ea8d5
    David 'Digit' Turner authored
    The problem is that time_t is signed, and the original code relied on the
    fact that (X + c < X) in case of overflow for c >= 0. Unfortunately, this
    condition is only guaranteed by the standard for unsigned arithmetic, and
    the gcc 4.4.0 optimizer did completely remove the corresponding test from
    the code. This resulted in a missing boundary check, and an infinite loop.
    
    The problem is solved by testing explicitely for TIME_T_MIN and TIME_T_MAX
    in the loop that uses this.
    
    Also fix increment_overflow and long_increment_overflow which were buggy
    for exactly the same reasons.
    
    Also remove some compiler warnings.
    
    Note: a similar fix was performed in bionic/libc
    833ea8d5
tztime.c 48.4 KB