aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/TextAPI/TextStubCommon.cpp
diff options
context:
space:
mode:
authorMikhail R. Gadelha <mikhail@igalia.com>2023-09-07 10:18:23 -0300
committerGitHub <noreply@github.com>2023-09-07 09:18:23 -0400
commit80225af4c1445c7818c6a71121d83bcc8ed7dd3b (patch)
treebef532f357d724a8a12848928fa0a1a642f8f862 /llvm/lib/TextAPI/TextStubCommon.cpp
parent281ae4903d6b93d49783115dbbbb2f6bb0112e78 (diff)
downloadllvm-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