Fix an infinite loop in time2sub.

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.

Note: a similar fix is needed for system/core/libcutils
1 file changed
tree: 7fcb6a68bb996c3c62d0dfdf54a08b8e50adb970
  1. libc/
  2. libdl/
  3. libm/
  4. libstdc++/
  5. libthread_db/
  6. linker/
  7. .gitignore
  8. Android.mk