Module Name:    src
Committed By:   christos
Date:           Fri Oct 28 13:53:06 UTC 2011

Modified Files:
        src/lib/libc/time: localtime.c

Log Message:
prevent underflow from giving us a false positive test in the first iteration.


To generate a diff of this commit:
cvs rdiff -u -r1.60 -r1.61 src/lib/libc/time/localtime.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/time/localtime.c
diff -u src/lib/libc/time/localtime.c:1.60 src/lib/libc/time/localtime.c:1.61
--- src/lib/libc/time/localtime.c:1.60	Thu Oct 27 10:48:00 2011
+++ src/lib/libc/time/localtime.c	Fri Oct 28 09:53:06 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: localtime.c,v 1.60 2011/10/27 14:48:00 christos Exp $	*/
+/*	$NetBSD: localtime.c,v 1.61 2011/10/28 13:53:06 christos Exp $	*/
 
 /*
 ** This file is in the public domain, so clarified as of
@@ -10,7 +10,7 @@
 #if 0
 static char	elsieid[] = "@(#)localtime.c	8.17";
 #else
-__RCSID("$NetBSD: localtime.c,v 1.60 2011/10/27 14:48:00 christos Exp $");
+__RCSID("$NetBSD: localtime.c,v 1.61 2011/10/28 13:53:06 christos Exp $");
 #endif
 #endif /* LIBC_SCCS and not lint */
 
@@ -1792,6 +1792,9 @@ time2sub(const timezone_t sp, struct tm 
 	long			li;
 	time_t			lo;
 	time_t			hi;
+#ifdef NO_ERROR_IN_DST_GAP
+	time_t			ilo;
+#endif
 	long				y;
 	time_t				newt;
 	time_t				t;
@@ -1886,6 +1889,9 @@ time2sub(const timezone_t sp, struct tm 
 			lo *= 2;
 		hi = -(lo + 1);
 	}
+#ifdef NO_ERROR_IN_DST_GAP
+	ilo = lo;
+#endif
 	for ( ; ; ) {
 		t = lo / 2 + hi / 2;
 		if (t < lo)
@@ -1913,7 +1919,7 @@ time2sub(const timezone_t sp, struct tm 
 				--hi;
 			}
 #ifdef NO_ERROR_IN_DST_GAP
-			if (lo - 1 == hi && yourtm.tm_isdst < 0) {
+			if (ilo != lo && lo - 1 == hi && yourtm.tm_isdst < 0) {
 				time_t off = 0;
 				for (i = sp->typecnt - 1; i >= 0; --i) {
 					for (j = sp->typecnt - 1; j >= 0; --j) {

Reply via email to