[tz] [PATCH 2/4] * localtime.c: Fix integer overflow bug in mktime implementation.

Paul Eggert eggert at cs.ucla.edu
Fri Aug 9 09:09:52 UTC 2013


(tmcomp): Don't mess up when atmp->tm_year - btmp->tm_year overflows.
This can happen when mktime is invoked on a struct tm with tm_year
equal to INT_MIN.
---
 localtime.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/localtime.c b/localtime.c
index 3814a6a..9600901 100644
--- a/localtime.c
+++ b/localtime.c
@@ -1709,8 +1709,9 @@ tmcomp(register const struct tm *const atmp,
 {
 	register int	result;
 
-	if ((result = (atmp->tm_year - btmp->tm_year)) == 0 &&
-		(result = (atmp->tm_mon - btmp->tm_mon)) == 0 &&
+	if (atmp->tm_year != btmp->tm_year)
+		return atmp->tm_year < btmp->tm_year ? -1 : 1;
+	if ((result = (atmp->tm_mon - btmp->tm_mon)) == 0 &&
 		(result = (atmp->tm_mday - btmp->tm_mday)) == 0 &&
 		(result = (atmp->tm_hour - btmp->tm_hour)) == 0 &&
 		(result = (atmp->tm_min - btmp->tm_min)) == 0)
-- 
1.8.1.2





More information about the tz mailing list