Resolves: #1300311
CVE-2014-9761: unbounded stack allocation in nan* functions
This commit is contained in:
parent
327133fe22
commit
421842aad7
259
glibc-rh1300311-1.patch
Normal file
259
glibc-rh1300311-1.patch
Normal file
@ -0,0 +1,259 @@
|
||||
commit f881f6ff62bba53448c5d8997287ea2e628b3a65
|
||||
Author: Andreas Schwab <schwab@suse.de>
|
||||
Date: Mon Oct 12 12:24:41 2015 +0200
|
||||
|
||||
Add dependencies on needed locales in each subdir tests (bug 18969)
|
||||
|
||||
Index: b/debug/Makefile
|
||||
===================================================================
|
||||
--- a/debug/Makefile
|
||||
+++ b/debug/Makefile
|
||||
@@ -162,6 +162,13 @@ generated += catchsegv xtrace
|
||||
|
||||
include ../Rules
|
||||
|
||||
+ifeq ($(run-built-tests),yes)
|
||||
+LOCALES := de_DE.UTF-8
|
||||
+include ../gen-locales.mk
|
||||
+
|
||||
+$(objpfx)tst-chk1.out: $(gen-locales)
|
||||
+endif
|
||||
+
|
||||
sLIBdir := $(shell echo $(slibdir) | sed 's,lib\(\|64\)$$,\\\\$$LIB,')
|
||||
|
||||
$(objpfx)catchsegv: catchsegv.sh $(common-objpfx)soversions.mk \
|
||||
Index: b/iconvdata/Makefile
|
||||
===================================================================
|
||||
--- a/iconvdata/Makefile
|
||||
+++ b/iconvdata/Makefile
|
||||
@@ -271,6 +271,14 @@ endif
|
||||
|
||||
include ../Rules
|
||||
|
||||
+ifeq ($(run-built-tests),yes)
|
||||
+LOCALES := de_DE.UTF-8
|
||||
+include ../gen-locales.mk
|
||||
+
|
||||
+$(objpfx)bug-iconv6.out: $(gen-locales)
|
||||
+$(objpfx)tst-iconv7.out: $(gen-locales)
|
||||
+endif
|
||||
+
|
||||
# Set libof-* for each routine.
|
||||
cpp-srcs-left := $(modules) $(generated-modules) $(libJIS-routines) \
|
||||
$(libKSC-routines) $(libGB-routines) $(libCNS-routines) \
|
||||
Index: b/intl/Makefile
|
||||
===================================================================
|
||||
--- a/intl/Makefile
|
||||
+++ b/intl/Makefile
|
||||
@@ -105,6 +105,19 @@ $(objpfx)tst-codeset.out: $(codeset_mo)
|
||||
$(objpfx)tst-gettext3.out: $(codeset_mo)
|
||||
$(objpfx)tst-gettext5.out: $(codeset_mo)
|
||||
endif
|
||||
+
|
||||
+LOCALES := de_DE.ISO-8859-1 de_DE.UTF-8 en_US.ANSI_X3.4-1968 fr_FR.ISO-8859-1 \
|
||||
+ ja_JP.UTF-8
|
||||
+include ../gen-locales.mk
|
||||
+
|
||||
+$(objpfx)tst-codeset.out: $(gen-locales)
|
||||
+$(objpfx)tst-gettext.out: $(gen-locales)
|
||||
+$(objpfx)tst-gettext2.out: $(gen-locales)
|
||||
+$(objpfx)tst-gettext3.out: $(gen-locales)
|
||||
+$(objpfx)tst-gettext4.out: $(gen-locales)
|
||||
+$(objpfx)tst-gettext5.out: $(gen-locales)
|
||||
+$(objpfx)tst-gettext6.out: $(gen-locales)
|
||||
+$(objpfx)tst-translit.out: $(gen-locales)
|
||||
endif
|
||||
|
||||
$(objpfx)msgs.h: po2test.awk ../po/de.po
|
||||
Index: b/libio/Makefile
|
||||
===================================================================
|
||||
--- a/libio/Makefile
|
||||
+++ b/libio/Makefile
|
||||
@@ -174,6 +174,30 @@ endif
|
||||
|
||||
include ../Rules
|
||||
|
||||
+ifeq ($(run-built-tests),yes)
|
||||
+LOCALES := de_DE.ISO-8859-1 de_DE.UTF-8 en_US.ISO-8859-1 en_US.UTF-8 \
|
||||
+ ja_JP.EUC-JP ja_JP.UTF-8
|
||||
+include ../gen-locales.mk
|
||||
+
|
||||
+$(objpfx)bug-ftell.out: $(gen-locales)
|
||||
+$(objpfx)bug-ungetwc1.out: $(gen-locales)
|
||||
+$(objpfx)bug-ungetwc2.out: $(gen-locales)
|
||||
+$(objpfx)tst-fgetwc.out: $(gen-locales)
|
||||
+$(objpfx)tst-fgetws.out: $(gen-locales)
|
||||
+$(objpfx)tst-fopenloc.out: $(gen-locales)
|
||||
+$(objpfx)tst-fputws.out: $(gen-locales)
|
||||
+$(objpfx)tst-fseek.out: $(gen-locales)
|
||||
+$(objpfx)tst-ftell-active-handler.out: $(gen-locales)
|
||||
+$(objpfx)tst-ftell-append.out: $(gen-locales)
|
||||
+$(objpfx)tst-ftell-partial-wide.out: $(gen-locales)
|
||||
+$(objpfx)tst-setvbuf1.out: $(gen-locales)
|
||||
+$(objpfx)tst-swscanf.out: $(gen-locales)
|
||||
+$(objpfx)tst-ungetwc1.out: $(gen-locales)
|
||||
+$(objpfx)tst-ungetwc2.out: $(gen-locales)
|
||||
+$(objpfx)tst-widetext.out: $(gen-locales)
|
||||
+$(objpfx)tst_wprintf2.out: $(gen-locales)
|
||||
+endif
|
||||
+
|
||||
$(objpfx)test-freopen.out: test-freopen.sh $(objpfx)test-freopen
|
||||
$(SHELL) $< $(common-objpfx) '$(test-program-prefix)' \
|
||||
$(common-objpfx)libio/; \
|
||||
Index: b/libio/tst_wprintf2.c
|
||||
===================================================================
|
||||
--- a/libio/tst_wprintf2.c
|
||||
+++ b/libio/tst_wprintf2.c
|
||||
@@ -26,7 +26,7 @@ main (int argc, char *argv[])
|
||||
|
||||
unlink (name);
|
||||
|
||||
- setlocale (LC_ALL, "");
|
||||
+ setlocale (LC_ALL, "en_US.UTF-8");
|
||||
|
||||
fp = fdopen (dup (fd), "w");
|
||||
if (fp == NULL)
|
||||
Index: b/posix/Makefile
|
||||
===================================================================
|
||||
--- a/posix/Makefile
|
||||
+++ b/posix/Makefile
|
||||
@@ -148,6 +148,36 @@ $(objpfx)wordexp-tst.out: wordexp-tst.sh
|
||||
'$(run-program-env)' '$(test-program-prefix-after-env)'; \
|
||||
$(evaluate-test)
|
||||
endif
|
||||
+
|
||||
+LOCALES := cs_CZ.UTF-8 da_DK.ISO-8859-1 de_DE.ISO-8859-1 de_DE.UTF-8 \
|
||||
+ en_US.UTF-8 es_US.ISO-8859-1 es_US.UTF-8 ja_JP.EUC-JP tr_TR.UTF-8
|
||||
+include ../gen-locales.mk
|
||||
+
|
||||
+$(objpfx)bug-regex1.out: $(gen-locales)
|
||||
+$(objpfx)bug-regex4.out: $(gen-locales)
|
||||
+$(objpfx)bug-regex5.out: $(gen-locales)
|
||||
+$(objpfx)bug-regex6.out: $(gen-locales)
|
||||
+$(objpfx)bug-regex17.out: $(gen-locales)
|
||||
+$(objpfx)bug-regex18.out: $(gen-locales)
|
||||
+$(objpfx)bug-regex19.out: $(gen-locales)
|
||||
+$(objpfx)bug-regex20.out: $(gen-locales)
|
||||
+$(objpfx)bug-regex22.out: $(gen-locales)
|
||||
+$(objpfx)bug-regex23.out: $(gen-locales)
|
||||
+$(objpfx)bug-regex25.out: $(gen-locales)
|
||||
+$(objpfx)bug-regex26.out: $(gen-locales)
|
||||
+$(objpfx)bug-regex30.out: $(gen-locales)
|
||||
+$(objpfx)bug-regex32.out: $(gen-locales)
|
||||
+$(objpfx)bug-regex33.out: $(gen-locales)
|
||||
+$(objpfx)bug-regex34.out: $(gen-locales)
|
||||
+$(objpfx)bug-regex35.out: $(gen-locales)
|
||||
+$(objpfx)tst-fnmatch.out: $(gen-locales)
|
||||
+$(objpfx)tst-fnmatch4.out: $(gen-locales)
|
||||
+$(objpfx)tst-fnmatch5.out: $(gen-locales)
|
||||
+$(objpfx)tst-regex.out: $(gen-locales)
|
||||
+$(objpfx)tst-regex2.out: $(gen-locales)
|
||||
+$(objpfx)tst-regexloc.out: $(gen-locales)
|
||||
+$(objpfx)tst-rxspencer.out: $(gen-locales)
|
||||
+$(objpfx)tst-rxspencer-no-utf8.out: $(gen-locales)
|
||||
endif
|
||||
|
||||
# If we will use the generic uname implementation, we must figure out what
|
||||
Index: b/stdio-common/Makefile
|
||||
===================================================================
|
||||
--- a/stdio-common/Makefile
|
||||
+++ b/stdio-common/Makefile
|
||||
@@ -69,6 +69,19 @@ endif
|
||||
include ../Rules
|
||||
|
||||
ifeq ($(run-built-tests),yes)
|
||||
+LOCALES := de_DE.ISO-8859-1 de_DE.UTF-8 en_US.ISO-8859-1 ja_JP.EUC-JP
|
||||
+include ../gen-locales.mk
|
||||
+
|
||||
+$(objpfx)bug14.out: $(gen-locales)
|
||||
+$(objpfx)scanf13.out: $(gen-locales)
|
||||
+$(objpfx)test-vfprintf.out: $(gen-locales)
|
||||
+$(objpfx)tst-grouping.out: $(gen-locales)
|
||||
+$(objpfx)tst-sprintf.out: $(gen-locales)
|
||||
+$(objpfx)tst-sscanf.out: $(gen-locales)
|
||||
+$(objpfx)tst-swprintf.out: $(gen-locales)
|
||||
+endif
|
||||
+
|
||||
+ifeq ($(run-built-tests),yes)
|
||||
$(objpfx)tst-unbputc.out: tst-unbputc.sh $(objpfx)tst-unbputc
|
||||
$(SHELL) $< $(common-objpfx) '$(test-program-prefix)'; \
|
||||
$(evaluate-test)
|
||||
Index: b/stdlib/Makefile
|
||||
===================================================================
|
||||
--- a/stdlib/Makefile
|
||||
+++ b/stdlib/Makefile
|
||||
@@ -121,6 +121,18 @@ endif
|
||||
|
||||
include ../Rules
|
||||
|
||||
+ifeq ($(run-built-tests),yes)
|
||||
+LOCALES := cs_CZ.UTF-8 de_DE.UTF-8 en_US.ISO-8859-1 tr_TR.UTF-8
|
||||
+include ../gen-locales.mk
|
||||
+
|
||||
+$(objpfx)bug-strtod2.out: $(gen-locales)
|
||||
+$(objpfx)testmb2.out: $(gen-locales)
|
||||
+$(objpfx)tst-strtod.out: $(gen-locales)
|
||||
+$(objpfx)tst-strtod3.out: $(gen-locales)
|
||||
+$(objpfx)tst-strtod4.out: $(gen-locales)
|
||||
+$(objpfx)tst-strtod5.out: $(gen-locales)
|
||||
+endif
|
||||
+
|
||||
# Testdir has to be named stdlib and needs to be writable
|
||||
test-canon-ARGS = --test-dir=${common-objpfx}stdlib
|
||||
|
||||
Index: b/time/Makefile
|
||||
===================================================================
|
||||
--- a/time/Makefile
|
||||
+++ b/time/Makefile
|
||||
@@ -41,6 +41,14 @@ tests := test_time clocktest tst-posixtz
|
||||
|
||||
include ../Rules
|
||||
|
||||
+ifeq ($(run-built-tests),yes)
|
||||
+LOCALES := de_DE.ISO-8859-1 en_US.ISO-8859-1 ja_JP.EUC-JP
|
||||
+include ../gen-locales.mk
|
||||
+
|
||||
+$(objpfx)tst-ftime_l.out: $(gen-locales)
|
||||
+$(objpfx)tst-strptime.out: $(gen-locales)
|
||||
+endif
|
||||
+
|
||||
tz-cflags = -DTZDIR='"$(zonedir)"' \
|
||||
-DTZDEFAULT='"$(localtime-file)"' \
|
||||
-DTZDEFRULES='"$(posixrules-file)"'
|
||||
Index: b/wcsmbs/Makefile
|
||||
===================================================================
|
||||
--- a/wcsmbs/Makefile
|
||||
+++ b/wcsmbs/Makefile
|
||||
@@ -49,6 +49,19 @@ tests := tst-wcstof wcsmbs-tst1 tst-wcsn
|
||||
|
||||
include ../Rules
|
||||
|
||||
+ifeq ($(run-built-tests),yes)
|
||||
+LOCALES := de_DE.ISO-8859-1 de_DE.UTF-8 en_US.ANSI_X3.4-1968 hr_HR.ISO-8859-2 \
|
||||
+ ja_JP.EUC-JP zh_TW.EUC-TW
|
||||
+include ../gen-locales.mk
|
||||
+
|
||||
+$(objpfx)tst-btowc.out: $(gen-locales)
|
||||
+$(objpfx)tst-c16c32-1.out: $(gen-locales)
|
||||
+$(objpfx)tst-mbrtowc.out: $(gen-locales)
|
||||
+$(objpfx)tst-mbrtowc2.out: $(gen-locales)
|
||||
+$(objpfx)tst-wcrtomb.out: $(gen-locales)
|
||||
+$(objpfx)wcsmbs-tst1.out: $(gen-locales)
|
||||
+endif
|
||||
+
|
||||
CFLAGS-wcwidth.c = -I../wctype
|
||||
CFLAGS-wcswidth.c = -I../wctype
|
||||
|
||||
Index: b/wcsmbs/wcsmbs-tst1.c
|
||||
===================================================================
|
||||
--- a/wcsmbs/wcsmbs-tst1.c
|
||||
+++ b/wcsmbs/wcsmbs-tst1.c
|
||||
@@ -18,7 +18,7 @@ main (void)
|
||||
char str[] = "Hello";
|
||||
int result = 0;
|
||||
|
||||
- pchar = setlocale (LC_ALL, "");
|
||||
+ pchar = setlocale (LC_ALL, "de_DE.UTF-8");
|
||||
printf ("locale : %s\n",pchar);
|
||||
printf ("MB_CUR_MAX %Zd\n", MB_CUR_MAX);
|
||||
|
285
glibc-rh1300311-2.patch
Normal file
285
glibc-rh1300311-2.patch
Normal file
@ -0,0 +1,285 @@
|
||||
commit f5eee5c72b2ab56f3faf4f46729fe82805efde68
|
||||
Author: Joseph Myers <joseph@codesourcery.com>
|
||||
Date: Mon Nov 23 08:50:53 2015 +0000
|
||||
|
||||
Fix strtol in Turkish locales (bug 19242).
|
||||
|
||||
The implementations of strtol and related functions use
|
||||
locale-specific conversions to upper case before determining whether a
|
||||
character is a valid letter in the argument. This means that in
|
||||
Turkish locales such as tr_TR.UTF-8 and tr_TR.ISO-8859-9, "i" is
|
||||
interpreted as not being a valid number, when if the base passed to
|
||||
strtol is 19 or more it should be interpreted as the number 18.
|
||||
|
||||
ISO C explicitly says "The letters from a (or A) through z (or Z) are
|
||||
ascribed the values 10 through 35", so clearly intends the standard
|
||||
ASCII letters (otherwise you wouldn't generally have exactly 26
|
||||
letters to ascribe such values) (whereas white-space must be
|
||||
identified according to the locale). In particular, 'i' and 'I' must
|
||||
be understood to be in that sequence.
|
||||
|
||||
This patch makes the code do the case conversions and classification
|
||||
in the C locale; the user's locale remains used for whitespace testing
|
||||
(explicitly correct according to ISO C). Note that the way the code
|
||||
worked, the only non-ASCII letter that would previously have been
|
||||
accepted would have been the Turkish 'ı' (dotless 'i'), because the
|
||||
uppercase version of that in Turkish locales is 'I'. This patch means
|
||||
that will no longer be accepted, which seems appropriate.
|
||||
|
||||
Tested for x86_64 and x86.
|
||||
|
||||
[BZ #19242]
|
||||
* stdlib/strtol_l.c (ISALPHA): Use _nl_C_locobj_ptr for locale.
|
||||
(TOUPPER): Likewise.
|
||||
* stdlib/tst-strtol-locale-main.c: New file.
|
||||
* stdlib/tst-strtol-locale.c: Likewise.
|
||||
* stdlib/Makefile (tests): Add tst-strtol-locale.
|
||||
[$(run-built-tests) = yes] (LOCALES): Add tr_TR.ISO-8859-9.
|
||||
[$(run-built-tests) = yes] ($(objpfx)tst-strtol-locale.out):
|
||||
Depend on $(gen-locales).
|
||||
* wcsmbs/tst-wcstol-locale.c: New file.
|
||||
* wcsmbs/Makefile (tests): Add tst-wcstol-locale.
|
||||
[$(run-built-tests) = yes] (LOCALES): Add tr_TR.UTF-8 and
|
||||
tr_TR.ISO-8859-9.
|
||||
[$(run-built-tests) = yes] ($(objpfx)tst-wcstol-locale.out):
|
||||
Depend on $(gen-locales).
|
||||
|
||||
Index: b/stdlib/Makefile
|
||||
===================================================================
|
||||
--- a/stdlib/Makefile
|
||||
+++ b/stdlib/Makefile
|
||||
@@ -74,7 +74,8 @@ tests := tst-strtol tst-strtod testmb t
|
||||
tst-makecontext3 bug-getcontext bug-fmtmsg1 \
|
||||
tst-secure-getenv tst-strtod-overflow tst-strtod-round \
|
||||
tst-tininess tst-strtod-underflow tst-tls-atexit \
|
||||
- tst-setcontext3 tst-tls-atexit-nodelete
|
||||
+ tst-setcontext3 tst-tls-atexit-nodelete \
|
||||
+ tst-strtol-locale
|
||||
tests-static := tst-secure-getenv
|
||||
|
||||
modules-names = tst-tls-atexit-lib
|
||||
@@ -122,7 +123,8 @@ endif
|
||||
include ../Rules
|
||||
|
||||
ifeq ($(run-built-tests),yes)
|
||||
-LOCALES := cs_CZ.UTF-8 de_DE.UTF-8 en_US.ISO-8859-1 tr_TR.UTF-8
|
||||
+LOCALES := cs_CZ.UTF-8 de_DE.UTF-8 en_US.ISO-8859-1 tr_TR.UTF-8 \
|
||||
+ tr_TR.ISO-8859-9
|
||||
include ../gen-locales.mk
|
||||
|
||||
$(objpfx)bug-strtod2.out: $(gen-locales)
|
||||
@@ -131,6 +133,7 @@ $(objpfx)tst-strtod.out: $(gen-locales)
|
||||
$(objpfx)tst-strtod3.out: $(gen-locales)
|
||||
$(objpfx)tst-strtod4.out: $(gen-locales)
|
||||
$(objpfx)tst-strtod5.out: $(gen-locales)
|
||||
+$(objpfx)tst-strtol-locale.out: $(gen-locales)
|
||||
endif
|
||||
|
||||
# Testdir has to be named stdlib and needs to be writable
|
||||
Index: b/stdlib/strtol_l.c
|
||||
===================================================================
|
||||
--- a/stdlib/strtol_l.c
|
||||
+++ b/stdlib/strtol_l.c
|
||||
@@ -137,8 +137,8 @@
|
||||
# define UCHAR_TYPE wint_t
|
||||
# define STRING_TYPE wchar_t
|
||||
# define ISSPACE(Ch) __iswspace_l ((Ch), loc)
|
||||
-# define ISALPHA(Ch) __iswalpha_l ((Ch), loc)
|
||||
-# define TOUPPER(Ch) __towupper_l ((Ch), loc)
|
||||
+# define ISALPHA(Ch) __iswalpha_l ((Ch), _nl_C_locobj_ptr)
|
||||
+# define TOUPPER(Ch) __towupper_l ((Ch), _nl_C_locobj_ptr)
|
||||
#else
|
||||
# if defined _LIBC \
|
||||
|| defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
|
||||
@@ -150,8 +150,8 @@
|
||||
# define UCHAR_TYPE unsigned char
|
||||
# define STRING_TYPE char
|
||||
# define ISSPACE(Ch) __isspace_l ((Ch), loc)
|
||||
-# define ISALPHA(Ch) __isalpha_l ((Ch), loc)
|
||||
-# define TOUPPER(Ch) __toupper_l ((Ch), loc)
|
||||
+# define ISALPHA(Ch) __isalpha_l ((Ch), _nl_C_locobj_ptr)
|
||||
+# define TOUPPER(Ch) __toupper_l ((Ch), _nl_C_locobj_ptr)
|
||||
#endif
|
||||
|
||||
#define INTERNAL(X) INTERNAL1(X)
|
||||
Index: b/stdlib/tst-strtol-locale-main.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/stdlib/tst-strtol-locale-main.c
|
||||
@@ -0,0 +1,87 @@
|
||||
+/* Test strtol functions work with all ASCII letters in Turkish
|
||||
+ locales (bug 19242).
|
||||
+ Copyright (C) 2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <locale.h>
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <wchar.h>
|
||||
+
|
||||
+#define STR_(X) #X
|
||||
+#define STR(X) STR_(X)
|
||||
+#define FNPFXS STR (FNPFX)
|
||||
+#define CONCAT_(X, Y) X ## Y
|
||||
+#define CONCAT(X, Y) CONCAT_ (X, Y)
|
||||
+#define FNX(FN) CONCAT (FNPFX, FN)
|
||||
+
|
||||
+#define TEST(LOC, STR, EXP_VAL, FN, TYPE, FMT) \
|
||||
+ do \
|
||||
+ { \
|
||||
+ CHAR *ep; \
|
||||
+ TYPE val = FNX (FN) (STR, &ep, 36); \
|
||||
+ printf ("%s: " FNPFXS #FN " (" SFMT ") == " FMT "\n", LOC, STR, val); \
|
||||
+ if (val == (TYPE) (EXP_VAL) && *ep == 0) \
|
||||
+ printf ("PASS: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR); \
|
||||
+ else \
|
||||
+ { \
|
||||
+ printf ("FAIL: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR); \
|
||||
+ result = 1; \
|
||||
+ } \
|
||||
+ } \
|
||||
+ while (0)
|
||||
+
|
||||
+static int
|
||||
+test_one_locale (const char *loc)
|
||||
+{
|
||||
+ if (setlocale (LC_ALL, loc) == NULL)
|
||||
+ {
|
||||
+ printf ("setlocale (LC_ALL, \"%s\") failed\n", loc);
|
||||
+ return 1;
|
||||
+ }
|
||||
+ int result = 0;
|
||||
+ for (int i = 10; i < 36; i++)
|
||||
+ {
|
||||
+ CHAR s[2];
|
||||
+ s[0] = L_('A') + i - 10;
|
||||
+ s[1] = 0;
|
||||
+ TEST (loc, s, i, l, long int, "%ld");
|
||||
+ TEST (loc, s, i, ul, unsigned long int, "%lu");
|
||||
+ TEST (loc, s, i, ll, long long int, "%lld");
|
||||
+ TEST (loc, s, i, ull, unsigned long long int, "%llu");
|
||||
+ s[0] = L_('a') + i - 10;
|
||||
+ s[1] = 0;
|
||||
+ TEST (loc, s, i, l, long int, "%ld");
|
||||
+ TEST (loc, s, i, ul, unsigned long int, "%lu");
|
||||
+ TEST (loc, s, i, ll, long long int, "%lld");
|
||||
+ TEST (loc, s, i, ull, unsigned long long int, "%llu");
|
||||
+ }
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+do_test (void)
|
||||
+{
|
||||
+ int result = 0;
|
||||
+ result |= test_one_locale ("C");
|
||||
+ result |= test_one_locale ("tr_TR.UTF-8");
|
||||
+ result |= test_one_locale ("tr_TR.ISO-8859-9");
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
+#define TEST_FUNCTION do_test ()
|
||||
+#include "../test-skeleton.c"
|
||||
Index: b/stdlib/tst-strtol-locale.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/stdlib/tst-strtol-locale.c
|
||||
@@ -0,0 +1,25 @@
|
||||
+/* Test strtol functions work with all ASCII letters in Turkish
|
||||
+ locales (bug 19242). Narrow string version.
|
||||
+ Copyright (C) 2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#define CHAR char
|
||||
+#define SFMT "\"%s\""
|
||||
+#define FNPFX strto
|
||||
+#define L_(C) C
|
||||
+
|
||||
+#include <tst-strtol-locale-main.c>
|
||||
Index: b/wcsmbs/Makefile
|
||||
===================================================================
|
||||
--- a/wcsmbs/Makefile
|
||||
+++ b/wcsmbs/Makefile
|
||||
@@ -45,13 +45,14 @@ routines := wcscat wcschr wcscmp wcscpy
|
||||
strop-tests := wcscmp wcsncmp wmemcmp wcslen wcschr wcsrchr wcscpy
|
||||
tests := tst-wcstof wcsmbs-tst1 tst-wcsnlen tst-btowc tst-mbrtowc \
|
||||
tst-wcrtomb tst-wcpncpy tst-mbsrtowcs tst-wchar-h tst-mbrtowc2 \
|
||||
- tst-c16c32-1 wcsatcliff $(addprefix test-,$(strop-tests))
|
||||
+ tst-c16c32-1 wcsatcliff tst-wcstol-locale \
|
||||
+ $(addprefix test-,$(strop-tests))
|
||||
|
||||
include ../Rules
|
||||
|
||||
ifeq ($(run-built-tests),yes)
|
||||
LOCALES := de_DE.ISO-8859-1 de_DE.UTF-8 en_US.ANSI_X3.4-1968 hr_HR.ISO-8859-2 \
|
||||
- ja_JP.EUC-JP zh_TW.EUC-TW
|
||||
+ ja_JP.EUC-JP zh_TW.EUC-TW tr_TR.UTF-8 tr_TR.ISO-8859-9
|
||||
include ../gen-locales.mk
|
||||
|
||||
$(objpfx)tst-btowc.out: $(gen-locales)
|
||||
@@ -60,6 +61,7 @@ $(objpfx)tst-mbrtowc.out: $(gen-locales)
|
||||
$(objpfx)tst-mbrtowc2.out: $(gen-locales)
|
||||
$(objpfx)tst-wcrtomb.out: $(gen-locales)
|
||||
$(objpfx)wcsmbs-tst1.out: $(gen-locales)
|
||||
+$(objpfx)tst-wcstol-locale.out: $(gen-locales)
|
||||
endif
|
||||
|
||||
CFLAGS-wcwidth.c = -I../wctype
|
||||
Index: b/wcsmbs/tst-wcstol-locale.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/wcsmbs/tst-wcstol-locale.c
|
||||
@@ -0,0 +1,25 @@
|
||||
+/* Test strtol functions work with all ASCII letters in Turkish
|
||||
+ locales (bug 19242). Wide string version.
|
||||
+ Copyright (C) 2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#define CHAR wchar_t
|
||||
+#define SFMT "L\"%ls\""
|
||||
+#define FNPFX wcsto
|
||||
+#define L_(C) L ## C
|
||||
+
|
||||
+#include "../stdlib/tst-strtol-locale-main.c"
|
265
glibc-rh1300311-3.patch
Normal file
265
glibc-rh1300311-3.patch
Normal file
@ -0,0 +1,265 @@
|
||||
commit a7f0c5ae4184916f0e145de3aefc794bf2e280ad
|
||||
Author: Joseph Myers <joseph@codesourcery.com>
|
||||
Date: Tue Nov 24 22:21:59 2015 +0000
|
||||
|
||||
Fix strtod ("NAN(I)") in Turkish locales (bug 19266).
|
||||
|
||||
The implementations of strtod and related functions use
|
||||
locale-specific conversions to lower case when parsing the contents of
|
||||
a string NAN(n-char-sequence_opt). This has the consequence that
|
||||
NAN(I) is not treated as being of that form (only the initial NAN part
|
||||
is accepted). The syntax of n-char-sequence directly maps to the
|
||||
ASCII letters, digits and underscore as in identifiers, so it is
|
||||
unambiguous that all ASCII letters must be accepted in all locales.
|
||||
|
||||
This patch, relative to a tree with
|
||||
<https://sourceware.org/ml/libc-alpha/2015-11/msg00258.html> (pending
|
||||
review) applied and depending on that patch, fixes this problem by
|
||||
checking directly for ASCII letters. This will have the side effect
|
||||
of no longer accepting 'İ' (dotted 'I') inside NAN() in Turkish
|
||||
locales, which seems appropriate (that letter wouldn't have been
|
||||
interpreted as having any meaning in the NaN payload anyway, as not
|
||||
acceptable to strtoull).
|
||||
|
||||
Tested for x86_64 and x86.
|
||||
|
||||
[BZ #19266]
|
||||
* stdlib/strtod_l.c (____STRTOF_INTERNAL): Check directly for
|
||||
upper case and lower case letters inside NAN(), not using TOLOWER.
|
||||
* stdlib/tst-strtod-nan-locale-main.c: New file.
|
||||
* stdlib/tst-strtod-nan-locale.c: Likewise.
|
||||
* stdlib/Makefile (tests): Add tst-strtod-nan-locale.
|
||||
[$(run-built-tests) = yes] ($(objpfx)tst-strtod-nan-locale.out):
|
||||
Depend on $(gen-locales).
|
||||
($(objpfx)tst-strtod-nan-locale): Depend on $(libm).
|
||||
* wcsmbs/tst-wcstod-nan-locale.c: New file.
|
||||
* wcsmbs/Makefile (tests): Add tst-wcstod-nan-locale.
|
||||
[$(run-built-tests) = yes] ($(objpfx)tst-wcstod-nan-locale.out):
|
||||
Depend on $(gen-locales).
|
||||
($(objpfx)tst-wcstod-nan-locale): Depend on $(libm).
|
||||
|
||||
Index: b/stdlib/Makefile
|
||||
===================================================================
|
||||
--- a/stdlib/Makefile
|
||||
+++ b/stdlib/Makefile
|
||||
@@ -75,7 +75,7 @@ tests := tst-strtol tst-strtod testmb t
|
||||
tst-secure-getenv tst-strtod-overflow tst-strtod-round \
|
||||
tst-tininess tst-strtod-underflow tst-tls-atexit \
|
||||
tst-setcontext3 tst-tls-atexit-nodelete \
|
||||
- tst-strtol-locale
|
||||
+ tst-strtol-locale tst-strtod-nan-locale
|
||||
tests-static := tst-secure-getenv
|
||||
|
||||
modules-names = tst-tls-atexit-lib
|
||||
@@ -134,6 +134,7 @@ $(objpfx)tst-strtod3.out: $(gen-locales)
|
||||
$(objpfx)tst-strtod4.out: $(gen-locales)
|
||||
$(objpfx)tst-strtod5.out: $(gen-locales)
|
||||
$(objpfx)tst-strtol-locale.out: $(gen-locales)
|
||||
+$(objpfx)tst-strtod-nan-locale.out: $(gen-locales)
|
||||
endif
|
||||
|
||||
# Testdir has to be named stdlib and needs to be writable
|
||||
@@ -168,6 +169,7 @@ $(objpfx)tst-strtod-round: $(libm)
|
||||
$(objpfx)tst-tininess: $(libm)
|
||||
$(objpfx)tst-strtod-underflow: $(libm)
|
||||
$(objpfx)tst-strtod6: $(libm)
|
||||
+$(objpfx)tst-strtod-nan-locale: $(libm)
|
||||
|
||||
tst-tls-atexit-lib.so-no-z-defs = yes
|
||||
|
||||
Index: b/stdlib/strtod_l.c
|
||||
===================================================================
|
||||
--- a/stdlib/strtod_l.c
|
||||
+++ b/stdlib/strtod_l.c
|
||||
@@ -658,8 +658,8 @@ ____STRTOF_INTERNAL (nptr, endptr, group
|
||||
do
|
||||
++cp;
|
||||
while ((*cp >= L_('0') && *cp <= L_('9'))
|
||||
- || ({ CHAR_TYPE lo = TOLOWER (*cp);
|
||||
- lo >= L_('a') && lo <= L_('z'); })
|
||||
+ || (*cp >= L_('A') && *cp <= L_('Z'))
|
||||
+ || (*cp >= L_('a') && *cp <= L_('z'))
|
||||
|| *cp == L_('_'));
|
||||
|
||||
if (*cp != L_(')'))
|
||||
Index: b/stdlib/tst-strtod-nan-locale-main.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/stdlib/tst-strtod-nan-locale-main.c
|
||||
@@ -0,0 +1,89 @@
|
||||
+/* Test strtod functions work with all ASCII letters in NAN(...) in
|
||||
+ Turkish locales (bug 19266).
|
||||
+ Copyright (C) 2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <locale.h>
|
||||
+#include <math.h>
|
||||
+#include <stdio.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <wchar.h>
|
||||
+
|
||||
+#define STR_(X) #X
|
||||
+#define STR(X) STR_(X)
|
||||
+#define FNPFXS STR (FNPFX)
|
||||
+#define CONCAT_(X, Y) X ## Y
|
||||
+#define CONCAT(X, Y) CONCAT_ (X, Y)
|
||||
+#define FNX(FN) CONCAT (FNPFX, FN)
|
||||
+
|
||||
+#define TEST(LOC, STR, FN, TYPE) \
|
||||
+ do \
|
||||
+ { \
|
||||
+ CHAR *ep; \
|
||||
+ TYPE val = FNX (FN) (STR, &ep); \
|
||||
+ if (isnan (val) && *ep == 0) \
|
||||
+ printf ("PASS: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR); \
|
||||
+ else \
|
||||
+ { \
|
||||
+ printf ("FAIL: %s: " FNPFXS #FN " (" SFMT ")\n", LOC, STR); \
|
||||
+ result = 1; \
|
||||
+ } \
|
||||
+ } \
|
||||
+ while (0)
|
||||
+
|
||||
+static int
|
||||
+test_one_locale (const char *loc)
|
||||
+{
|
||||
+ if (setlocale (LC_ALL, loc) == NULL)
|
||||
+ {
|
||||
+ printf ("setlocale (LC_ALL, \"%s\") failed\n", loc);
|
||||
+ return 1;
|
||||
+ }
|
||||
+ int result = 0;
|
||||
+ for (int i = 10; i < 36; i++)
|
||||
+ {
|
||||
+ CHAR s[7];
|
||||
+ s[0] = L_('N');
|
||||
+ s[1] = L_('A');
|
||||
+ s[2] = L_('N');
|
||||
+ s[3] = L_('(');
|
||||
+ s[4] = L_('A') + i - 10;
|
||||
+ s[5] = L_(')');
|
||||
+ s[6] = 0;
|
||||
+ TEST (loc, s, f, float);
|
||||
+ TEST (loc, s, d, double);
|
||||
+ TEST (loc, s, ld, long double);
|
||||
+ s[4] = L_('a') + i - 10;
|
||||
+ TEST (loc, s, f, float);
|
||||
+ TEST (loc, s, d, double);
|
||||
+ TEST (loc, s, ld, long double);
|
||||
+ }
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
+static int
|
||||
+do_test (void)
|
||||
+{
|
||||
+ int result = 0;
|
||||
+ result |= test_one_locale ("C");
|
||||
+ result |= test_one_locale ("tr_TR.UTF-8");
|
||||
+ result |= test_one_locale ("tr_TR.ISO-8859-9");
|
||||
+ return result;
|
||||
+}
|
||||
+
|
||||
+#define TEST_FUNCTION do_test ()
|
||||
+#include "../test-skeleton.c"
|
||||
Index: b/stdlib/tst-strtod-nan-locale.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/stdlib/tst-strtod-nan-locale.c
|
||||
@@ -0,0 +1,25 @@
|
||||
+/* Test strtod functions work with all ASCII letters in NAN(...) in
|
||||
+ Turkish locales (bug 19266). Narrow string version.
|
||||
+ Copyright (C) 2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#define CHAR char
|
||||
+#define SFMT "\"%s\""
|
||||
+#define FNPFX strto
|
||||
+#define L_(C) C
|
||||
+
|
||||
+#include <tst-strtod-nan-locale-main.c>
|
||||
Index: b/wcsmbs/Makefile
|
||||
===================================================================
|
||||
--- a/wcsmbs/Makefile
|
||||
+++ b/wcsmbs/Makefile
|
||||
@@ -45,7 +45,7 @@ routines := wcscat wcschr wcscmp wcscpy
|
||||
strop-tests := wcscmp wcsncmp wmemcmp wcslen wcschr wcsrchr wcscpy
|
||||
tests := tst-wcstof wcsmbs-tst1 tst-wcsnlen tst-btowc tst-mbrtowc \
|
||||
tst-wcrtomb tst-wcpncpy tst-mbsrtowcs tst-wchar-h tst-mbrtowc2 \
|
||||
- tst-c16c32-1 wcsatcliff tst-wcstol-locale \
|
||||
+ tst-c16c32-1 wcsatcliff tst-wcstol-locale tst-wcstod-nan-locale \
|
||||
$(addprefix test-,$(strop-tests))
|
||||
|
||||
include ../Rules
|
||||
@@ -62,6 +62,7 @@ $(objpfx)tst-mbrtowc2.out: $(gen-locales
|
||||
$(objpfx)tst-wcrtomb.out: $(gen-locales)
|
||||
$(objpfx)wcsmbs-tst1.out: $(gen-locales)
|
||||
$(objpfx)tst-wcstol-locale.out: $(gen-locales)
|
||||
+$(objpfx)tst-wcstod-nan-locale.out: $(gen-locales)
|
||||
endif
|
||||
|
||||
CFLAGS-wcwidth.c = -I../wctype
|
||||
@@ -93,3 +94,5 @@ CPPFLAGS += $(libio-mtsafe)
|
||||
|
||||
# We need to find the default version of strtold_l in stdlib.
|
||||
CPPFLAGS-wcstold_l.c = -I../stdlib
|
||||
+
|
||||
+$(objpfx)tst-wcstod-nan-locale: $(libm)
|
||||
Index: b/wcsmbs/tst-wcstod-nan-locale.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/wcsmbs/tst-wcstod-nan-locale.c
|
||||
@@ -0,0 +1,25 @@
|
||||
+/* Test strtod functions work with all ASCII letters in NAN(...) in
|
||||
+ Turkish locales (bug 19266). Wide string version.
|
||||
+ Copyright (C) 2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#define CHAR wchar_t
|
||||
+#define SFMT "L\"%ls\""
|
||||
+#define FNPFX wcsto
|
||||
+#define L_(C) L ## C
|
||||
+
|
||||
+#include "../stdlib/tst-strtod-nan-locale-main.c"
|
925
glibc-rh1300311-4.patch
Normal file
925
glibc-rh1300311-4.patch
Normal file
@ -0,0 +1,925 @@
|
||||
commit e02cabecf0d025ec4f4ddee290bdf7aadb873bb3
|
||||
Author: Joseph Myers <joseph@codesourcery.com>
|
||||
Date: Tue Nov 24 22:24:52 2015 +0000
|
||||
|
||||
Refactor strtod parsing of NaN payloads.
|
||||
|
||||
The nan* functions handle their string argument by constructing a
|
||||
NAN(...) string on the stack as a VLA and passing it to strtod
|
||||
functions.
|
||||
|
||||
This approach has problems discussed in bug 16961 and bug 16962: the
|
||||
stack usage is unbounded, and it gives incorrect results in certain
|
||||
cases where the argument is not a valid n-char-sequence.
|
||||
|
||||
The natural fix for both issues is to refactor the NaN payload parsing
|
||||
out of strtod into a separate function that the nan* functions can
|
||||
call directly, so that no temporary string needs constructing on the
|
||||
stack at all. This patch does that refactoring in preparation for
|
||||
fixing those bugs (but without actually using the new functions from
|
||||
nan* - which will also require exporting them from libc at version
|
||||
GLIBC_PRIVATE). This patch is not intended to change any user-visible
|
||||
behavior, so no tests are added (fixes for the above bugs will of
|
||||
course add tests for them).
|
||||
|
||||
This patch builds on my recent fixes for strtol and strtod issues in
|
||||
Turkish locales. Given those fixes, the parsing of NaN payloads is
|
||||
locale-independent; thus, the new functions do not need to take a
|
||||
locale_t argument.
|
||||
|
||||
Tested for x86_64, x86, mips64 and powerpc.
|
||||
|
||||
* stdlib/strtod_nan.c: New file.
|
||||
* stdlib/strtod_nan_double.h: Likewise.
|
||||
* stdlib/strtod_nan_float.h: Likewise.
|
||||
* stdlib/strtod_nan_main.c: Likewise.
|
||||
* stdlib/strtod_nan_narrow.h: Likewise.
|
||||
* stdlib/strtod_nan_wide.h: Likewise.
|
||||
* stdlib/strtof_nan.c: Likewise.
|
||||
* stdlib/strtold_nan.c: Likewise.
|
||||
* sysdeps/ieee754/ldbl-128/strtod_nan_ldouble.h: Likewise.
|
||||
* sysdeps/ieee754/ldbl-128ibm/strtod_nan_ldouble.h: Likewise.
|
||||
* sysdeps/ieee754/ldbl-96/strtod_nan_ldouble.h: Likewise.
|
||||
* wcsmbs/wcstod_nan.c: Likewise.
|
||||
* wcsmbs/wcstof_nan.c: Likewise.
|
||||
* wcsmbs/wcstold_nan.c: Likewise.
|
||||
* stdlib/Makefile (routines): Add strtof_nan, strtod_nan and
|
||||
strtold_nan.
|
||||
* wcsmbs/Makefile (routines): Add wcstod_nan, wcstold_nan and
|
||||
wcstof_nan.
|
||||
* include/stdlib.h (__strtof_nan): Declare and use
|
||||
libc_hidden_proto.
|
||||
(__strtod_nan): Likewise.
|
||||
(__strtold_nan): Likewise.
|
||||
(__wcstof_nan): Likewise.
|
||||
(__wcstod_nan): Likewise.
|
||||
(__wcstold_nan): Likewise.
|
||||
* include/wchar.h (____wcstoull_l_internal): Declare.
|
||||
* stdlib/strtod_l.c: Do not include <ieee754.h>.
|
||||
(____strtoull_l_internal): Remove declaration.
|
||||
(STRTOF_NAN): Define macro.
|
||||
(SET_MANTISSA): Remove macro.
|
||||
(STRTOULL): Likewise.
|
||||
(____STRTOF_INTERNAL): Use STRTOF_NAN to parse NaN payload.
|
||||
* stdlib/strtof_l.c (____strtoull_l_internal): Remove declaration.
|
||||
(STRTOF_NAN): Define macro.
|
||||
(SET_MANTISSA): Remove macro.
|
||||
* sysdeps/ieee754/ldbl-128/strtold_l.c (STRTOF_NAN): Define macro.
|
||||
(SET_MANTISSA): Remove macro.
|
||||
* sysdeps/ieee754/ldbl-128ibm/strtold_l.c (STRTOF_NAN): Define
|
||||
macro.
|
||||
(SET_MANTISSA): Remove macro.
|
||||
* sysdeps/ieee754/ldbl-64-128/strtold_l.c (STRTOF_NAN): Define
|
||||
macro.
|
||||
(SET_MANTISSA): Remove macro.
|
||||
* sysdeps/ieee754/ldbl-96/strtold_l.c (STRTOF_NAN): Define macro.
|
||||
(SET_MANTISSA): Remove macro.
|
||||
* wcsmbs/wcstod_l.c (____wcstoull_l_internal): Remove declaration.
|
||||
* wcsmbs/wcstof_l.c (____wcstoull_l_internal): Likewise.
|
||||
* wcsmbs/wcstold_l.c (____wcstoull_l_internal): Likewise.
|
||||
|
||||
Index: b/include/stdlib.h
|
||||
===================================================================
|
||||
--- a/include/stdlib.h
|
||||
+++ b/include/stdlib.h
|
||||
@@ -203,6 +203,24 @@ libc_hidden_proto (strtoll)
|
||||
libc_hidden_proto (strtoul)
|
||||
libc_hidden_proto (strtoull)
|
||||
|
||||
+extern float __strtof_nan (const char *, char **, char) internal_function;
|
||||
+extern double __strtod_nan (const char *, char **, char) internal_function;
|
||||
+extern long double __strtold_nan (const char *, char **, char)
|
||||
+ internal_function;
|
||||
+extern float __wcstof_nan (const wchar_t *, wchar_t **, wchar_t)
|
||||
+ internal_function;
|
||||
+extern double __wcstod_nan (const wchar_t *, wchar_t **, wchar_t)
|
||||
+ internal_function;
|
||||
+extern long double __wcstold_nan (const wchar_t *, wchar_t **, wchar_t)
|
||||
+ internal_function;
|
||||
+
|
||||
+libc_hidden_proto (__strtof_nan)
|
||||
+libc_hidden_proto (__strtod_nan)
|
||||
+libc_hidden_proto (__strtold_nan)
|
||||
+libc_hidden_proto (__wcstof_nan)
|
||||
+libc_hidden_proto (__wcstod_nan)
|
||||
+libc_hidden_proto (__wcstold_nan)
|
||||
+
|
||||
extern char *__ecvt (double __value, int __ndigit, int *__restrict __decpt,
|
||||
int *__restrict __sign);
|
||||
extern char *__fcvt (double __value, int __ndigit, int *__restrict __decpt,
|
||||
Index: b/include/wchar.h
|
||||
===================================================================
|
||||
--- a/include/wchar.h
|
||||
+++ b/include/wchar.h
|
||||
@@ -52,6 +52,9 @@ extern unsigned long long int __wcstoull
|
||||
__restrict __endptr,
|
||||
int __base,
|
||||
int __group) __THROW;
|
||||
+extern unsigned long long int ____wcstoull_l_internal (const wchar_t *,
|
||||
+ wchar_t **, int, int,
|
||||
+ __locale_t);
|
||||
libc_hidden_proto (__wcstof_internal)
|
||||
libc_hidden_proto (__wcstod_internal)
|
||||
libc_hidden_proto (__wcstold_internal)
|
||||
Index: b/stdlib/Makefile
|
||||
===================================================================
|
||||
--- a/stdlib/Makefile
|
||||
+++ b/stdlib/Makefile
|
||||
@@ -50,6 +50,7 @@ routines := \
|
||||
strtol_l strtoul_l strtoll_l strtoull_l \
|
||||
strtof strtod strtold \
|
||||
strtof_l strtod_l strtold_l \
|
||||
+ strtof_nan strtod_nan strtold_nan \
|
||||
system canonicalize \
|
||||
a64l l64a \
|
||||
rpmatch strfmon strfmon_l getsubopt xpg_basename fmtmsg \
|
||||
Index: b/stdlib/strtod_l.c
|
||||
===================================================================
|
||||
--- a/stdlib/strtod_l.c
|
||||
+++ b/stdlib/strtod_l.c
|
||||
@@ -20,8 +20,6 @@
|
||||
#include <xlocale.h>
|
||||
|
||||
extern double ____strtod_l_internal (const char *, char **, int, __locale_t);
|
||||
-extern unsigned long long int ____strtoull_l_internal (const char *, char **,
|
||||
- int, int, __locale_t);
|
||||
|
||||
/* Configuration part. These macros are defined by `strtold.c',
|
||||
`strtof.c', `wcstod.c', `wcstold.c', and `wcstof.c' to produce the
|
||||
@@ -33,27 +31,20 @@ extern unsigned long long int ____strtou
|
||||
# ifdef USE_WIDE_CHAR
|
||||
# define STRTOF wcstod_l
|
||||
# define __STRTOF __wcstod_l
|
||||
+# define STRTOF_NAN __wcstod_nan
|
||||
# else
|
||||
# define STRTOF strtod_l
|
||||
# define __STRTOF __strtod_l
|
||||
+# define STRTOF_NAN __strtod_nan
|
||||
# endif
|
||||
# define MPN2FLOAT __mpn_construct_double
|
||||
# define FLOAT_HUGE_VAL HUGE_VAL
|
||||
-# define SET_MANTISSA(flt, mant) \
|
||||
- do { union ieee754_double u; \
|
||||
- u.d = (flt); \
|
||||
- u.ieee_nan.mantissa0 = (mant) >> 32; \
|
||||
- u.ieee_nan.mantissa1 = (mant); \
|
||||
- if ((u.ieee.mantissa0 | u.ieee.mantissa1) != 0) \
|
||||
- (flt) = u.d; \
|
||||
- } while (0)
|
||||
#endif
|
||||
/* End of configuration part. */
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <float.h>
|
||||
-#include <ieee754.h>
|
||||
#include "../locale/localeinfo.h"
|
||||
#include <locale.h>
|
||||
#include <math.h>
|
||||
@@ -104,7 +95,6 @@ extern unsigned long long int ____strtou
|
||||
# define TOLOWER_C(Ch) __towlower_l ((Ch), _nl_C_locobj_ptr)
|
||||
# define STRNCASECMP(S1, S2, N) \
|
||||
__wcsncasecmp_l ((S1), (S2), (N), _nl_C_locobj_ptr)
|
||||
-# define STRTOULL(S, E, B) ____wcstoull_l_internal ((S), (E), (B), 0, loc)
|
||||
#else
|
||||
# define STRING_TYPE char
|
||||
# define CHAR_TYPE char
|
||||
@@ -116,7 +106,6 @@ extern unsigned long long int ____strtou
|
||||
# define TOLOWER_C(Ch) __tolower_l ((Ch), _nl_C_locobj_ptr)
|
||||
# define STRNCASECMP(S1, S2, N) \
|
||||
__strncasecmp_l ((S1), (S2), (N), _nl_C_locobj_ptr)
|
||||
-# define STRTOULL(S, E, B) ____strtoull_l_internal ((S), (E), (B), 0, loc)
|
||||
#endif
|
||||
|
||||
|
||||
@@ -655,33 +644,14 @@ ____STRTOF_INTERNAL (nptr, endptr, group
|
||||
if (*cp == L_('('))
|
||||
{
|
||||
const STRING_TYPE *startp = cp;
|
||||
- do
|
||||
- ++cp;
|
||||
- while ((*cp >= L_('0') && *cp <= L_('9'))
|
||||
- || (*cp >= L_('A') && *cp <= L_('Z'))
|
||||
- || (*cp >= L_('a') && *cp <= L_('z'))
|
||||
- || *cp == L_('_'));
|
||||
-
|
||||
- if (*cp != L_(')'))
|
||||
- /* The closing brace is missing. Only match the NAN
|
||||
- part. */
|
||||
- cp = startp;
|
||||
+ STRING_TYPE *endp;
|
||||
+ retval = STRTOF_NAN (cp + 1, &endp, L_(')'));
|
||||
+ if (*endp == L_(')'))
|
||||
+ /* Consume the closing parenthesis. */
|
||||
+ cp = endp + 1;
|
||||
else
|
||||
- {
|
||||
- /* This is a system-dependent way to specify the
|
||||
- bitmask used for the NaN. We expect it to be
|
||||
- a number which is put in the mantissa of the
|
||||
- number. */
|
||||
- STRING_TYPE *endp;
|
||||
- unsigned long long int mant;
|
||||
-
|
||||
- mant = STRTOULL (startp + 1, &endp, 0);
|
||||
- if (endp == cp)
|
||||
- SET_MANTISSA (retval, mant);
|
||||
-
|
||||
- /* Consume the closing brace. */
|
||||
- ++cp;
|
||||
- }
|
||||
+ /* Only match the NAN part. */
|
||||
+ cp = startp;
|
||||
}
|
||||
|
||||
if (endptr != NULL)
|
||||
Index: b/stdlib/strtod_nan.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/stdlib/strtod_nan.c
|
||||
@@ -0,0 +1,24 @@
|
||||
+/* Convert string for NaN payload to corresponding NaN. Narrow
|
||||
+ strings, double.
|
||||
+ Copyright (C) 2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <strtod_nan_narrow.h>
|
||||
+#include <strtod_nan_double.h>
|
||||
+
|
||||
+#define STRTOD_NAN __strtod_nan
|
||||
+#include <strtod_nan_main.c>
|
||||
Index: b/stdlib/strtod_nan_double.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/stdlib/strtod_nan_double.h
|
||||
@@ -0,0 +1,30 @@
|
||||
+/* Convert string for NaN payload to corresponding NaN. For double.
|
||||
+ Copyright (C) 1997-2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#define FLOAT double
|
||||
+#define SET_MANTISSA(flt, mant) \
|
||||
+ do \
|
||||
+ { \
|
||||
+ union ieee754_double u; \
|
||||
+ u.d = (flt); \
|
||||
+ u.ieee_nan.mantissa0 = (mant) >> 32; \
|
||||
+ u.ieee_nan.mantissa1 = (mant); \
|
||||
+ if ((u.ieee.mantissa0 | u.ieee.mantissa1) != 0) \
|
||||
+ (flt) = u.d; \
|
||||
+ } \
|
||||
+ while (0)
|
||||
Index: b/stdlib/strtod_nan_float.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/stdlib/strtod_nan_float.h
|
||||
@@ -0,0 +1,29 @@
|
||||
+/* Convert string for NaN payload to corresponding NaN. For float.
|
||||
+ Copyright (C) 1997-2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#define FLOAT float
|
||||
+#define SET_MANTISSA(flt, mant) \
|
||||
+ do \
|
||||
+ { \
|
||||
+ union ieee754_float u; \
|
||||
+ u.f = (flt); \
|
||||
+ u.ieee_nan.mantissa = (mant); \
|
||||
+ if (u.ieee.mantissa != 0) \
|
||||
+ (flt) = u.f; \
|
||||
+ } \
|
||||
+ while (0)
|
||||
Index: b/stdlib/strtod_nan_main.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/stdlib/strtod_nan_main.c
|
||||
@@ -0,0 +1,63 @@
|
||||
+/* Convert string for NaN payload to corresponding NaN.
|
||||
+ Copyright (C) 1997-2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <ieee754.h>
|
||||
+#include <locale.h>
|
||||
+#include <math.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <wchar.h>
|
||||
+
|
||||
+
|
||||
+/* If STR starts with an optional n-char-sequence as defined by ISO C
|
||||
+ (a sequence of ASCII letters, digits and underscores), followed by
|
||||
+ ENDC, return a NaN whose payload is set based on STR. Otherwise,
|
||||
+ return a default NAN. If ENDPTR is not NULL, set *ENDPTR to point
|
||||
+ to the character after the initial n-char-sequence. */
|
||||
+
|
||||
+internal_function
|
||||
+FLOAT
|
||||
+STRTOD_NAN (const STRING_TYPE *str, STRING_TYPE **endptr, STRING_TYPE endc)
|
||||
+{
|
||||
+ const STRING_TYPE *cp = str;
|
||||
+
|
||||
+ while ((*cp >= L_('0') && *cp <= L_('9'))
|
||||
+ || (*cp >= L_('A') && *cp <= L_('Z'))
|
||||
+ || (*cp >= L_('a') && *cp <= L_('z'))
|
||||
+ || *cp == L_('_'))
|
||||
+ ++cp;
|
||||
+
|
||||
+ FLOAT retval = NAN;
|
||||
+ if (*cp != endc)
|
||||
+ goto out;
|
||||
+
|
||||
+ /* This is a system-dependent way to specify the bitmask used for
|
||||
+ the NaN. We expect it to be a number which is put in the
|
||||
+ mantissa of the number. */
|
||||
+ STRING_TYPE *endp;
|
||||
+ unsigned long long int mant;
|
||||
+
|
||||
+ mant = STRTOULL (str, &endp, 0);
|
||||
+ if (endp == cp)
|
||||
+ SET_MANTISSA (retval, mant);
|
||||
+
|
||||
+ out:
|
||||
+ if (endptr != NULL)
|
||||
+ *endptr = (STRING_TYPE *) cp;
|
||||
+ return retval;
|
||||
+}
|
||||
+libc_hidden_def (STRTOD_NAN)
|
||||
Index: b/stdlib/strtod_nan_narrow.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/stdlib/strtod_nan_narrow.h
|
||||
@@ -0,0 +1,22 @@
|
||||
+/* Convert string for NaN payload to corresponding NaN. Narrow strings.
|
||||
+ Copyright (C) 1997-2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#define STRING_TYPE char
|
||||
+#define L_(Ch) Ch
|
||||
+#define STRTOULL(S, E, B) ____strtoull_l_internal ((S), (E), (B), 0, \
|
||||
+ _nl_C_locobj_ptr)
|
||||
Index: b/stdlib/strtod_nan_wide.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/stdlib/strtod_nan_wide.h
|
||||
@@ -0,0 +1,22 @@
|
||||
+/* Convert string for NaN payload to corresponding NaN. Wide strings.
|
||||
+ Copyright (C) 1997-2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#define STRING_TYPE wchar_t
|
||||
+#define L_(Ch) L##Ch
|
||||
+#define STRTOULL(S, E, B) ____wcstoull_l_internal ((S), (E), (B), 0, \
|
||||
+ _nl_C_locobj_ptr)
|
||||
Index: b/stdlib/strtof_l.c
|
||||
===================================================================
|
||||
--- a/stdlib/strtof_l.c
|
||||
+++ b/stdlib/strtof_l.c
|
||||
@@ -20,26 +20,19 @@
|
||||
#include <xlocale.h>
|
||||
|
||||
extern float ____strtof_l_internal (const char *, char **, int, __locale_t);
|
||||
-extern unsigned long long int ____strtoull_l_internal (const char *, char **,
|
||||
- int, int, __locale_t);
|
||||
|
||||
#define FLOAT float
|
||||
#define FLT FLT
|
||||
#ifdef USE_WIDE_CHAR
|
||||
# define STRTOF wcstof_l
|
||||
# define __STRTOF __wcstof_l
|
||||
+# define STRTOF_NAN __wcstof_nan
|
||||
#else
|
||||
# define STRTOF strtof_l
|
||||
# define __STRTOF __strtof_l
|
||||
+# define STRTOF_NAN __strtof_nan
|
||||
#endif
|
||||
#define MPN2FLOAT __mpn_construct_float
|
||||
#define FLOAT_HUGE_VAL HUGE_VALF
|
||||
-#define SET_MANTISSA(flt, mant) \
|
||||
- do { union ieee754_float u; \
|
||||
- u.f = (flt); \
|
||||
- u.ieee_nan.mantissa = (mant); \
|
||||
- if (u.ieee.mantissa != 0) \
|
||||
- (flt) = u.f; \
|
||||
- } while (0)
|
||||
|
||||
#include "strtod_l.c"
|
||||
Index: b/stdlib/strtof_nan.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/stdlib/strtof_nan.c
|
||||
@@ -0,0 +1,24 @@
|
||||
+/* Convert string for NaN payload to corresponding NaN. Narrow
|
||||
+ strings, float.
|
||||
+ Copyright (C) 2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <strtod_nan_narrow.h>
|
||||
+#include <strtod_nan_float.h>
|
||||
+
|
||||
+#define STRTOD_NAN __strtof_nan
|
||||
+#include <strtod_nan_main.c>
|
||||
Index: b/stdlib/strtold_nan.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/stdlib/strtold_nan.c
|
||||
@@ -0,0 +1,30 @@
|
||||
+/* Convert string for NaN payload to corresponding NaN. Narrow
|
||||
+ strings, long double.
|
||||
+ Copyright (C) 2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <math.h>
|
||||
+
|
||||
+/* This function is unused if long double and double have the same
|
||||
+ representation. */
|
||||
+#ifndef __NO_LONG_DOUBLE_MATH
|
||||
+# include <strtod_nan_narrow.h>
|
||||
+# include <strtod_nan_ldouble.h>
|
||||
+
|
||||
+# define STRTOD_NAN __strtold_nan
|
||||
+# include <strtod_nan_main.c>
|
||||
+#endif
|
||||
Index: b/sysdeps/ieee754/ldbl-128/strtod_nan_ldouble.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/ieee754/ldbl-128/strtod_nan_ldouble.h
|
||||
@@ -0,0 +1,33 @@
|
||||
+/* Convert string for NaN payload to corresponding NaN. For ldbl-128.
|
||||
+ Copyright (C) 1997-2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#define FLOAT long double
|
||||
+#define SET_MANTISSA(flt, mant) \
|
||||
+ do \
|
||||
+ { \
|
||||
+ union ieee854_long_double u; \
|
||||
+ u.d = (flt); \
|
||||
+ u.ieee_nan.mantissa0 = 0; \
|
||||
+ u.ieee_nan.mantissa1 = 0; \
|
||||
+ u.ieee_nan.mantissa2 = (mant) >> 32; \
|
||||
+ u.ieee_nan.mantissa3 = (mant); \
|
||||
+ if ((u.ieee.mantissa0 | u.ieee.mantissa1 \
|
||||
+ | u.ieee.mantissa2 | u.ieee.mantissa3) != 0) \
|
||||
+ (flt) = u.d; \
|
||||
+ } \
|
||||
+ while (0)
|
||||
Index: b/sysdeps/ieee754/ldbl-128/strtold_l.c
|
||||
===================================================================
|
||||
--- a/sysdeps/ieee754/ldbl-128/strtold_l.c
|
||||
+++ b/sysdeps/ieee754/ldbl-128/strtold_l.c
|
||||
@@ -25,22 +25,13 @@
|
||||
#ifdef USE_WIDE_CHAR
|
||||
# define STRTOF wcstold_l
|
||||
# define __STRTOF __wcstold_l
|
||||
+# define STRTOF_NAN __wcstold_nan
|
||||
#else
|
||||
# define STRTOF strtold_l
|
||||
# define __STRTOF __strtold_l
|
||||
+# define STRTOF_NAN __strtold_nan
|
||||
#endif
|
||||
#define MPN2FLOAT __mpn_construct_long_double
|
||||
#define FLOAT_HUGE_VAL HUGE_VALL
|
||||
-#define SET_MANTISSA(flt, mant) \
|
||||
- do { union ieee854_long_double u; \
|
||||
- u.d = (flt); \
|
||||
- u.ieee_nan.mantissa0 = 0; \
|
||||
- u.ieee_nan.mantissa1 = 0; \
|
||||
- u.ieee_nan.mantissa2 = (mant) >> 32; \
|
||||
- u.ieee_nan.mantissa3 = (mant); \
|
||||
- if ((u.ieee.mantissa0 | u.ieee.mantissa1 \
|
||||
- | u.ieee.mantissa2 | u.ieee.mantissa3) != 0) \
|
||||
- (flt) = u.d; \
|
||||
- } while (0)
|
||||
|
||||
#include <strtod_l.c>
|
||||
Index: b/sysdeps/ieee754/ldbl-128ibm/strtod_nan_ldouble.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/ieee754/ldbl-128ibm/strtod_nan_ldouble.h
|
||||
@@ -0,0 +1,30 @@
|
||||
+/* Convert string for NaN payload to corresponding NaN. For ldbl-128ibm.
|
||||
+ Copyright (C) 1997-2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#define FLOAT long double
|
||||
+#define SET_MANTISSA(flt, mant) \
|
||||
+ do \
|
||||
+ { \
|
||||
+ union ibm_extended_long_double u; \
|
||||
+ u.ld = (flt); \
|
||||
+ u.d[0].ieee_nan.mantissa0 = (mant) >> 32; \
|
||||
+ u.d[0].ieee_nan.mantissa1 = (mant); \
|
||||
+ if ((u.d[0].ieee.mantissa0 | u.d[0].ieee.mantissa1) != 0) \
|
||||
+ (flt) = u.ld; \
|
||||
+ } \
|
||||
+ while (0)
|
||||
Index: b/sysdeps/ieee754/ldbl-128ibm/strtold_l.c
|
||||
===================================================================
|
||||
--- a/sysdeps/ieee754/ldbl-128ibm/strtold_l.c
|
||||
+++ b/sysdeps/ieee754/ldbl-128ibm/strtold_l.c
|
||||
@@ -30,25 +30,19 @@ extern long double ____new_wcstold_l (co
|
||||
# define STRTOF __new_wcstold_l
|
||||
# define __STRTOF ____new_wcstold_l
|
||||
# define ____STRTOF_INTERNAL ____wcstold_l_internal
|
||||
+# define STRTOF_NAN __wcstold_nan
|
||||
#else
|
||||
extern long double ____new_strtold_l (const char *, char **, __locale_t);
|
||||
# define STRTOF __new_strtold_l
|
||||
# define __STRTOF ____new_strtold_l
|
||||
# define ____STRTOF_INTERNAL ____strtold_l_internal
|
||||
+# define STRTOF_NAN __strtold_nan
|
||||
#endif
|
||||
extern __typeof (__STRTOF) STRTOF;
|
||||
libc_hidden_proto (__STRTOF)
|
||||
libc_hidden_proto (STRTOF)
|
||||
#define MPN2FLOAT __mpn_construct_long_double
|
||||
#define FLOAT_HUGE_VAL HUGE_VALL
|
||||
-# define SET_MANTISSA(flt, mant) \
|
||||
- do { union ibm_extended_long_double u; \
|
||||
- u.ld = (flt); \
|
||||
- u.d[0].ieee_nan.mantissa0 = (mant) >> 32; \
|
||||
- u.d[0].ieee_nan.mantissa1 = (mant); \
|
||||
- if ((u.d[0].ieee.mantissa0 | u.d[0].ieee.mantissa1) != 0) \
|
||||
- (flt) = u.ld; \
|
||||
- } while (0)
|
||||
|
||||
#include <strtod_l.c>
|
||||
|
||||
Index: b/sysdeps/ieee754/ldbl-64-128/strtold_l.c
|
||||
===================================================================
|
||||
--- a/sysdeps/ieee754/ldbl-64-128/strtold_l.c
|
||||
+++ b/sysdeps/ieee754/ldbl-64-128/strtold_l.c
|
||||
@@ -30,28 +30,19 @@ extern long double ____new_wcstold_l (co
|
||||
# define STRTOF __new_wcstold_l
|
||||
# define __STRTOF ____new_wcstold_l
|
||||
# define ____STRTOF_INTERNAL ____wcstold_l_internal
|
||||
+# define STRTOF_NAN __wcstold_nan
|
||||
#else
|
||||
extern long double ____new_strtold_l (const char *, char **, __locale_t);
|
||||
# define STRTOF __new_strtold_l
|
||||
# define __STRTOF ____new_strtold_l
|
||||
# define ____STRTOF_INTERNAL ____strtold_l_internal
|
||||
+# define STRTOF_NAN __strtold_nan
|
||||
#endif
|
||||
extern __typeof (__STRTOF) STRTOF;
|
||||
libc_hidden_proto (__STRTOF)
|
||||
libc_hidden_proto (STRTOF)
|
||||
#define MPN2FLOAT __mpn_construct_long_double
|
||||
#define FLOAT_HUGE_VAL HUGE_VALL
|
||||
-#define SET_MANTISSA(flt, mant) \
|
||||
- do { union ieee854_long_double u; \
|
||||
- u.d = (flt); \
|
||||
- u.ieee_nan.mantissa0 = 0; \
|
||||
- u.ieee_nan.mantissa1 = 0; \
|
||||
- u.ieee_nan.mantissa2 = (mant) >> 32; \
|
||||
- u.ieee_nan.mantissa3 = (mant); \
|
||||
- if ((u.ieee.mantissa0 | u.ieee.mantissa1 \
|
||||
- | u.ieee.mantissa2 | u.ieee.mantissa3) != 0) \
|
||||
- (flt) = u.d; \
|
||||
- } while (0)
|
||||
|
||||
#include <strtod_l.c>
|
||||
|
||||
Index: b/sysdeps/ieee754/ldbl-96/strtod_nan_ldouble.h
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/sysdeps/ieee754/ldbl-96/strtod_nan_ldouble.h
|
||||
@@ -0,0 +1,30 @@
|
||||
+/* Convert string for NaN payload to corresponding NaN. For ldbl-96.
|
||||
+ Copyright (C) 1997-2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#define FLOAT long double
|
||||
+#define SET_MANTISSA(flt, mant) \
|
||||
+ do \
|
||||
+ { \
|
||||
+ union ieee854_long_double u; \
|
||||
+ u.d = (flt); \
|
||||
+ u.ieee_nan.mantissa0 = (mant) >> 32; \
|
||||
+ u.ieee_nan.mantissa1 = (mant); \
|
||||
+ if ((u.ieee.mantissa0 | u.ieee.mantissa1) != 0) \
|
||||
+ (flt) = u.d; \
|
||||
+ } \
|
||||
+ while (0)
|
||||
Index: b/sysdeps/ieee754/ldbl-96/strtold_l.c
|
||||
===================================================================
|
||||
--- a/sysdeps/ieee754/ldbl-96/strtold_l.c
|
||||
+++ b/sysdeps/ieee754/ldbl-96/strtold_l.c
|
||||
@@ -25,19 +25,13 @@
|
||||
#ifdef USE_WIDE_CHAR
|
||||
# define STRTOF wcstold_l
|
||||
# define __STRTOF __wcstold_l
|
||||
+# define STRTOF_NAN __wcstold_nan
|
||||
#else
|
||||
# define STRTOF strtold_l
|
||||
# define __STRTOF __strtold_l
|
||||
+# define STRTOF_NAN __strtold_nan
|
||||
#endif
|
||||
#define MPN2FLOAT __mpn_construct_long_double
|
||||
#define FLOAT_HUGE_VAL HUGE_VALL
|
||||
-#define SET_MANTISSA(flt, mant) \
|
||||
- do { union ieee854_long_double u; \
|
||||
- u.d = (flt); \
|
||||
- u.ieee_nan.mantissa0 = (mant) >> 32; \
|
||||
- u.ieee_nan.mantissa1 = (mant); \
|
||||
- if ((u.ieee.mantissa0 | u.ieee.mantissa1) != 0) \
|
||||
- (flt) = u.d; \
|
||||
- } while (0)
|
||||
|
||||
#include <stdlib/strtod_l.c>
|
||||
Index: b/wcsmbs/Makefile
|
||||
===================================================================
|
||||
--- a/wcsmbs/Makefile
|
||||
+++ b/wcsmbs/Makefile
|
||||
@@ -33,6 +33,7 @@ routines := wcscat wcschr wcscmp wcscpy
|
||||
wcstol wcstoul wcstoll wcstoull wcstod wcstold wcstof \
|
||||
wcstol_l wcstoul_l wcstoll_l wcstoull_l \
|
||||
wcstod_l wcstold_l wcstof_l \
|
||||
+ wcstod_nan wcstold_nan wcstof_nan \
|
||||
wcscoll wcsxfrm \
|
||||
wcwidth wcswidth \
|
||||
wcscoll_l wcsxfrm_l \
|
||||
Index: b/wcsmbs/wcstod_l.c
|
||||
===================================================================
|
||||
--- a/wcsmbs/wcstod_l.c
|
||||
+++ b/wcsmbs/wcstod_l.c
|
||||
@@ -23,9 +23,6 @@
|
||||
|
||||
extern double ____wcstod_l_internal (const wchar_t *, wchar_t **, int,
|
||||
__locale_t);
|
||||
-extern unsigned long long int ____wcstoull_l_internal (const wchar_t *,
|
||||
- wchar_t **, int, int,
|
||||
- __locale_t);
|
||||
|
||||
#define USE_WIDE_CHAR 1
|
||||
|
||||
Index: b/wcsmbs/wcstod_nan.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/wcsmbs/wcstod_nan.c
|
||||
@@ -0,0 +1,23 @@
|
||||
+/* Convert string for NaN payload to corresponding NaN. Wide strings, double.
|
||||
+ Copyright (C) 2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include "../stdlib/strtod_nan_wide.h"
|
||||
+#include "../stdlib/strtod_nan_double.h"
|
||||
+
|
||||
+#define STRTOD_NAN __wcstod_nan
|
||||
+#include "../stdlib/strtod_nan_main.c"
|
||||
Index: b/wcsmbs/wcstof_l.c
|
||||
===================================================================
|
||||
--- a/wcsmbs/wcstof_l.c
|
||||
+++ b/wcsmbs/wcstof_l.c
|
||||
@@ -25,8 +25,5 @@
|
||||
|
||||
extern float ____wcstof_l_internal (const wchar_t *, wchar_t **, int,
|
||||
__locale_t);
|
||||
-extern unsigned long long int ____wcstoull_l_internal (const wchar_t *,
|
||||
- wchar_t **, int, int,
|
||||
- __locale_t);
|
||||
|
||||
#include <stdlib/strtof_l.c>
|
||||
Index: b/wcsmbs/wcstof_nan.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/wcsmbs/wcstof_nan.c
|
||||
@@ -0,0 +1,23 @@
|
||||
+/* Convert string for NaN payload to corresponding NaN. Wide strings, float.
|
||||
+ Copyright (C) 2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include "../stdlib/strtod_nan_wide.h"
|
||||
+#include "../stdlib/strtod_nan_float.h"
|
||||
+
|
||||
+#define STRTOD_NAN __wcstof_nan
|
||||
+#include "../stdlib/strtod_nan_main.c"
|
||||
Index: b/wcsmbs/wcstold_l.c
|
||||
===================================================================
|
||||
--- a/wcsmbs/wcstold_l.c
|
||||
+++ b/wcsmbs/wcstold_l.c
|
||||
@@ -24,8 +24,5 @@
|
||||
|
||||
extern long double ____wcstold_l_internal (const wchar_t *, wchar_t **, int,
|
||||
__locale_t);
|
||||
-extern unsigned long long int ____wcstoull_l_internal (const wchar_t *,
|
||||
- wchar_t **, int, int,
|
||||
- __locale_t);
|
||||
|
||||
#include <strtold_l.c>
|
||||
Index: b/wcsmbs/wcstold_nan.c
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ b/wcsmbs/wcstold_nan.c
|
||||
@@ -0,0 +1,30 @@
|
||||
+/* Convert string for NaN payload to corresponding NaN. Wide strings,
|
||||
+ long double.
|
||||
+ Copyright (C) 2015 Free Software Foundation, Inc.
|
||||
+ This file is part of the GNU C Library.
|
||||
+
|
||||
+ The GNU C Library is free software; you can redistribute it and/or
|
||||
+ modify it under the terms of the GNU Lesser General Public
|
||||
+ License as published by the Free Software Foundation; either
|
||||
+ version 2.1 of the License, or (at your option) any later version.
|
||||
+
|
||||
+ The GNU C Library is distributed in the hope that it will be useful,
|
||||
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
+ Lesser General Public License for more details.
|
||||
+
|
||||
+ You should have received a copy of the GNU Lesser General Public
|
||||
+ License along with the GNU C Library; if not, see
|
||||
+ <http://www.gnu.org/licenses/>. */
|
||||
+
|
||||
+#include <math.h>
|
||||
+
|
||||
+/* This function is unused if long double and double have the same
|
||||
+ representation. */
|
||||
+#ifndef __NO_LONG_DOUBLE_MATH
|
||||
+# include "../stdlib/strtod_nan_wide.h"
|
||||
+# include <strtod_nan_ldouble.h>
|
||||
+
|
||||
+# define STRTOD_NAN __wcstold_nan
|
||||
+# include "../stdlib/strtod_nan_main.c"
|
||||
+#endif
|
@ -254,6 +254,10 @@ Patch1031: glibc-rh1332917-4.patch
|
||||
Patch1032: glibc-rh1332917-5.patch
|
||||
Patch1033: glibc-rh1321372.patch
|
||||
Patch1034: glibc-rh1300314.patch
|
||||
Patch1035: glibc-rh1300311-1.patch
|
||||
Patch1036: glibc-rh1300311-2.patch
|
||||
Patch1037: glibc-rh1300311-3.patch
|
||||
Patch1038: glibc-rh1300311-4.patch
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
@ -707,6 +711,10 @@ microbenchmark tests on the system.
|
||||
%patch1032 -p1
|
||||
%patch1033 -p1
|
||||
%patch1034 -p1
|
||||
%patch1035 -p1
|
||||
%patch1036 -p1
|
||||
%patch1037 -p1
|
||||
%patch1038 -p1
|
||||
%patch0059 -p1
|
||||
|
||||
##############################################################################
|
||||
@ -1930,6 +1938,7 @@ rm -f *.filelist*
|
||||
* Sat May 7 2016 Florian Weimer <fweimer@redhat.com> - 2.22-15
|
||||
- Change first day of the week for es_CL to Monday (#1321372)
|
||||
- CVE-2015-8779: unbounded stack allocation in catopen (#1300314)
|
||||
- CVE-2014-9761: unbounded stack allocation in nan* functions (#1300311)
|
||||
|
||||
* Fri May 6 2016 Florian Weimer <fweimer@redhat.com> - 2.22-14
|
||||
- Fix getnameinfo memory leak and incorrect truncation (#1333901)
|
||||
|
Loading…
Reference in New Issue
Block a user