[all-commits] [llvm/llvm-project] 80225a: [libc] Fix overflow check for 32 bit long time_t (...
Mikhail R. Gadelha via All-commits
all-commits at lists.llvm.org
Thu Sep 7 06:18:37 PDT 2023
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 80225af4c1445c7818c6a71121d83bcc8ed7dd3b
https://github.com/llvm/llvm-project/commit/80225af4c1445c7818c6a71121d83bcc8ed7dd3b
Author: Mikhail R. Gadelha <mikhail at igalia.com>
Date: 2023-09-07 (Thu, 07 Sep 2023)
Changed paths:
M libc/src/time/mktime.cpp
M libc/src/time/time_utils.cpp
M libc/src/time/time_utils.h
Log Message:
-----------
[libc] Fix overflow check for 32 bit long time_t (#65394)
This patch fixes the overflow check in update_from_seconds, used by
gmtime, gmtime_r and mktime.
In update_from_seconds, total_seconds is a int64_t and the previous
overflow check for when sizeof(time_t) == 4 would check if it was <
0x80000000 and > 0x7FFFFFFF, however, this check would cause the
following issues:
1. Valid negative numbers would be discarded, e.g., -1 is
0xffffffffffffffff as a int64_t, outside the range of the overflow
check.
2. Some valid positive numbers would be discarded because the hex
constants were being implicitly converted to int64_t, e.g., 0x80000000
would be implicitly converted to 2147483648, instead of -2147483648.
The fix for both cases was to static_cast total_seconds and the
constants to time_t if sizeof(time_t) == 4. The behaviour is not changed
in systems with sizeof(time_t) == 8.
---------
Signed-off-by: Mikhail R. Gadelha <mikhail at igalia.com>
More information about the All-commits
mailing list