diff options
| author | Mikhail R. Gadelha <mikhail@igalia.com> | 2023-09-07 10:18:23 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-07 09:18:23 -0400 |
| commit | 80225af4c1445c7818c6a71121d83bcc8ed7dd3b (patch) | |
| tree | bef532f357d724a8a12848928fa0a1a642f8f862 /llvm/lib/TextAPI/TextStubCommon.cpp | |
| parent | 281ae4903d6b93d49783115dbbbb2f6bb0112e78 (diff) | |
| download | llvm-80225af4c1445c7818c6a71121d83bcc8ed7dd3b.zip llvm-80225af4c1445c7818c6a71121d83bcc8ed7dd3b.tar.gz llvm-80225af4c1445c7818c6a71121d83bcc8ed7dd3b.tar.bz2 | |
[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@igalia.com>
Diffstat (limited to 'llvm/lib/TextAPI/TextStubCommon.cpp')
0 files changed, 0 insertions, 0 deletions
