123456789101112131415161718192021222324252627282930313233343536373839 |
- From bc1e7731cee963e422575f81048792f4d5db9641 Mon Sep 17 00:00:00 2001
- From: Daniel Sabogal <[email protected]>
- Date: Wed, 2 Nov 2016 22:29:36 -0400
- Subject: fix integer overflow of tm_year in __secs_to_tm
- the overflow check for years+100 did not account for the extra
- year computed from the remaining months. instead, perform this
- check after obtaining the final number of years.
- ---
- src/time/__secs_to_tm.c | 9 +++++----
- 1 file changed, 5 insertions(+), 4 deletions(-)
- diff --git a/src/time/__secs_to_tm.c b/src/time/__secs_to_tm.c
- index 3a3123a..093d902 100644
- --- a/src/time/__secs_to_tm.c
- +++ b/src/time/__secs_to_tm.c
- @@ -60,15 +60,16 @@ int __secs_to_tm(long long t, struct tm *tm)
- for (months=0; days_in_month[months] <= remdays; months++)
- remdays -= days_in_month[months];
-
- + if (months >= 10) {
- + months -= 12;
- + years++;
- + }
- +
- if (years+100 > INT_MAX || years+100 < INT_MIN)
- return -1;
-
- tm->tm_year = years + 100;
- tm->tm_mon = months + 2;
- - if (tm->tm_mon >= 12) {
- - tm->tm_mon -=12;
- - tm->tm_year++;
- - }
- tm->tm_mday = remdays + 1;
- tm->tm_wday = wday;
- tm->tm_yday = yday;
- --
- cgit v0.11.2
|