[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [musl] Re: musl bugs found through gnulib
From: |
Paul Eggert |
Subject: |
Re: [musl] Re: musl bugs found through gnulib |
Date: |
Thu, 21 Jun 2012 01:52:00 -0700 |
User-agent: |
Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20120430 Thunderbird/12.0.1 |
On 06/20/2012 07:21 PM, Rich Felker wrote:
>>> Replacement of mktime, because of
>>> checking for working mktime... no
>
> This test is buggy; it goes into an infinite loop due to integer
> overflow UB, because the condition to break out of the loop is only
> checked when the test does not fail:
Thanks, I pushed the following patch into gnulib:
---
ChangeLog | 9 +++++++++
m4/mktime.m4 | 25 ++++++++++++++-----------
2 files changed, 23 insertions(+), 11 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 199b06c..1661a62 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2012-06-21 Paul Eggert <address@hidden>
+
+ mktime: fix integer overflow in 'configure'-time test
+ * m4/mktime.m4 (gl_FUNC_MKTIME): Do not rely on undefined behavior
+ after integer overflow. Problem reported by Rich Felker in
+ <http://lists.gnu.org/archive/html/bug-gnulib/2012-06/msg00257.html>.
+ Also, don't look for further instances of a bug if we've already
+ found one instance; this helps 'configure' run faster.
+
2012-06-20 John Darrington <address@hidden> (tiny change)
tmpfile, clean-temp: Fix invocation of GetVersionEx.
diff --git a/m4/mktime.m4 b/m4/mktime.m4
index 5e05dfa..14fcf7f 100644
--- a/m4/mktime.m4
+++ b/m4/mktime.m4
@@ -1,4 +1,4 @@
-# serial 21
+# serial 22
dnl Copyright (C) 2002-2003, 2005-2007, 2009-2012 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
@@ -192,20 +192,23 @@ main ()
if (tz_strings[i])
putenv (tz_strings[i]);
- for (t = 0; t <= time_t_max - delta; t += delta)
+ for (t = 0; t <= time_t_max - delta && (result & 1) == 0; t += delta)
if (! mktime_test (t))
result |= 1;
- if (! (mktime_test ((time_t) 1)
- && mktime_test ((time_t) (60 * 60))
- && mktime_test ((time_t) (60 * 60 * 24))))
+ if ((result & 2) == 0
+ && ! (mktime_test ((time_t) 1)
+ && mktime_test ((time_t) (60 * 60))
+ && mktime_test ((time_t) (60 * 60 * 24))))
result |= 2;
- for (j = 1; ; j <<= 1)
- if (! bigtime_test (j))
- result |= 4;
- else if (INT_MAX / 2 < j)
- break;
- if (! bigtime_test (INT_MAX))
+ for (j = 1; (result & 4) == 0; j <<= 1)
+ {
+ if (! bigtime_test (j))
+ result |= 4;
+ if (INT_MAX / 2 < j)
+ break;
+ }
+ if ((result & 8) == 0 && ! bigtime_test (INT_MAX))
result |= 8;
}
if (! irix_6_4_bug ())
--
1.7.6.5
- Re: musl, printf out-of-memory test, (continued)
- Re: musl, printf out-of-memory test, Rich Felker, 2012/06/19
- Re: musl, printf out-of-memory test, Bruno Haible, 2012/06/20
- Re: musl, printf out-of-memory test, Jim Meyering, 2012/06/20
- Re: musl, printf out-of-memory test, Tom Tromey, 2012/06/21
- Re: [musl] Re: musl bugs found through gnulib, Rich Felker, 2012/06/19
- Re: [musl] Re: musl bugs found through gnulib, Eric Blake, 2012/06/20
- Re: [musl] Re: musl bugs found through gnulib, Rich Felker, 2012/06/20
- Re: grantpt test, Bruno Haible, 2012/06/22
- Re: [musl] Re: musl bugs found through gnulib, Rich Felker, 2012/06/20
- Re: [musl] Re: musl bugs found through gnulib, Rich Felker, 2012/06/20
- Re: [musl] Re: musl bugs found through gnulib,
Paul Eggert <=
- Message not available
- Message not available
- rationale for closein, Bruno Haible, 2012/06/18
- Re: rationale for closein, Rich Felker, 2012/06/18
- Re: rationale for closein, Bruno Haible, 2012/06/18
- Re: rationale for closein, Eric Blake, 2012/06/18
- Re: rationale for closein, Rich Felker, 2012/06/18
- Re: rationale for closein, Eric Blake, 2012/06/19
- Re: rationale for closein, Rich Felker, 2012/06/19
- dlsym [was: rationale for closein], Eric Blake, 2012/06/19
- Re: rationale for closein, Paul Eggert, 2012/06/19