diff --git a/glibc-testsuite.changes b/glibc-testsuite.changes index a988b7d..50b0b7f 100644 --- a/glibc-testsuite.changes +++ b/glibc-testsuite.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Feb 18 13:22:19 UTC 2016 - schwab@suse.de + +- isinf-cxx11-conflict.patch: Fix isinf/isnan declaration conflict with + C++11 (bsc#963700, BZ #19439) + ------------------------------------------------------------------- Wed Feb 17 09:48:26 UTC 2016 - schwab@suse.de diff --git a/glibc-testsuite.spec b/glibc-testsuite.spec index f24a090..664d526 100644 --- a/glibc-testsuite.spec +++ b/glibc-testsuite.spec @@ -266,6 +266,8 @@ Patch1014: errorcheck-mutex-no-elision.patch Patch1015: refactor-nan-parsing.patch # PATCH-FIX-UPSTREAM Fix getaddrinfo stack-based buffer overflow (CVE-2015-7547, BZ #18665) Patch1016: send-dg-buffer-overflow.patch +# PATCH-FIX-UPSTREAM Fix isinf/isnan declaration conflict with C++11 (BZ #19439) +Patch1017: isinf-cxx11-conflict.patch ### # Patches awaiting upstream approval @@ -510,6 +512,7 @@ rm nscd/s-stamp %patch1014 -p1 %patch1015 -p1 %patch1016 -p1 +%patch1017 -p1 %patch2000 -p1 %patch2002 -p1 diff --git a/glibc-utils.changes b/glibc-utils.changes index a988b7d..50b0b7f 100644 --- a/glibc-utils.changes +++ b/glibc-utils.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Feb 18 13:22:19 UTC 2016 - schwab@suse.de + +- isinf-cxx11-conflict.patch: Fix isinf/isnan declaration conflict with + C++11 (bsc#963700, BZ #19439) + ------------------------------------------------------------------- Wed Feb 17 09:48:26 UTC 2016 - schwab@suse.de diff --git a/glibc-utils.spec b/glibc-utils.spec index dc8c2bc..4010918 100644 --- a/glibc-utils.spec +++ b/glibc-utils.spec @@ -265,6 +265,8 @@ Patch1014: errorcheck-mutex-no-elision.patch Patch1015: refactor-nan-parsing.patch # PATCH-FIX-UPSTREAM Fix getaddrinfo stack-based buffer overflow (CVE-2015-7547, BZ #18665) Patch1016: send-dg-buffer-overflow.patch +# PATCH-FIX-UPSTREAM Fix isinf/isnan declaration conflict with C++11 (BZ #19439) +Patch1017: isinf-cxx11-conflict.patch ### # Patches awaiting upstream approval @@ -510,6 +512,7 @@ rm nscd/s-stamp %patch1014 -p1 %patch1015 -p1 %patch1016 -p1 +%patch1017 -p1 %patch2000 -p1 %patch2002 -p1 diff --git a/glibc.changes b/glibc.changes index a988b7d..50b0b7f 100644 --- a/glibc.changes +++ b/glibc.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Thu Feb 18 13:22:19 UTC 2016 - schwab@suse.de + +- isinf-cxx11-conflict.patch: Fix isinf/isnan declaration conflict with + C++11 (bsc#963700, BZ #19439) + ------------------------------------------------------------------- Wed Feb 17 09:48:26 UTC 2016 - schwab@suse.de diff --git a/glibc.spec b/glibc.spec index 6cf70c8..98433c6 100644 --- a/glibc.spec +++ b/glibc.spec @@ -266,6 +266,8 @@ Patch1014: errorcheck-mutex-no-elision.patch Patch1015: refactor-nan-parsing.patch # PATCH-FIX-UPSTREAM Fix getaddrinfo stack-based buffer overflow (CVE-2015-7547, BZ #18665) Patch1016: send-dg-buffer-overflow.patch +# PATCH-FIX-UPSTREAM Fix isinf/isnan declaration conflict with C++11 (BZ #19439) +Patch1017: isinf-cxx11-conflict.patch ### # Patches awaiting upstream approval @@ -510,6 +512,7 @@ rm nscd/s-stamp %patch1014 -p1 %patch1015 -p1 %patch1016 -p1 +%patch1017 -p1 %patch2000 -p1 %patch2002 -p1 diff --git a/isinf-cxx11-conflict.patch b/isinf-cxx11-conflict.patch new file mode 100644 index 0000000..dec2fd8 --- /dev/null +++ b/isinf-cxx11-conflict.patch @@ -0,0 +1,127 @@ +2016-02-14 Jakub Jelinek + Jonathan Wakely + Carlos O'Donell + + [BZ 19439] + * math/Makefile (tests): Add test-math-isinff. + (CFLAGS-test-math-isinff.cc): Use -std=gnu++11. + * math/bits/mathcalls.h [__USE_MISC]: Use + '|| __MATH_DECLARING_DOUBLE == 0' to relax definition of + functions not in C++11 and which don't conflict e.g. isinff, + isinfl etc. + * math/test-math-isinff.cc: New file. + +2016-01-11 Jonathan Wakely + Adhemerval Zanella + + [BZ #19439] + * math/bits/mathcalls.h + [!__cplusplus || __cplusplus < 201103L] (isinf): Do not declare + prototype. + [!__cplusplus || __cplusplus < 201103L] (isnan): Likewise. + +Index: glibc-2.22/math/Makefile +=================================================================== +--- glibc-2.22.orig/math/Makefile ++++ glibc-2.22/math/Makefile +@@ -108,6 +108,7 @@ tests = test-matherr test-fenv atest-exp + test-tgmath-ret bug-nextafter bug-nexttoward bug-tgmath1 \ + test-tgmath-int test-tgmath2 test-powl tst-CMPLX tst-CMPLX2 test-snan \ + test-fenv-tls test-fenv-preserve test-fenv-return test-fenvinline \ ++ test-math-isinff \ + $(tests-static) + tests-static = test-fpucw-static test-fpucw-ieee-static + # We do the `long double' tests only if this data type is available and +@@ -184,6 +185,8 @@ CPPFLAGS-test-ildoubl.c = -U__LIBC_INTER + $(libm-test-fast-math-cflags) + + ++CFLAGS-test-math-isinff.cc = -std=gnu++11 ++ + # The -lieee module sets the _LIB_VERSION_ switch to IEEE mode + # for error handling in the -lm functions. + install-lib += libieee.a +Index: glibc-2.22/math/bits/mathcalls.h +=================================================================== +--- glibc-2.22.orig/math/bits/mathcalls.h ++++ glibc-2.22/math/bits/mathcalls.h +@@ -196,9 +196,13 @@ __MATHDECL_1 (int,__finite,, (_Mdouble_ + _Mdouble_END_NAMESPACE + + #ifdef __USE_MISC ++# if (!defined __cplusplus \ ++ || __cplusplus < 201103L /* isinf conflicts with C++11. */ \ ++ || __MATH_DECLARING_DOUBLE == 0) /* isinff or isinfl don't. */ + /* Return 0 if VALUE is finite or NaN, +1 if it + is +Infinity, -1 if it is -Infinity. */ + __MATHDECL_1 (int,isinf,, (_Mdouble_ __value)) __attribute__ ((__const__)); ++# endif + + /* Return nonzero if VALUE is finite and not NaN. */ + __MATHDECL_1 (int,finite,, (_Mdouble_ __value)) __attribute__ ((__const__)); +@@ -230,8 +234,12 @@ __END_NAMESPACE_C99 + __MATHDECL_1 (int,__isnan,, (_Mdouble_ __value)) __attribute__ ((__const__)); + + #if defined __USE_MISC || defined __USE_XOPEN ++# if (!defined __cplusplus \ ++ || __cplusplus < 201103L /* isnan conflicts with C++11. */ \ ++ || __MATH_DECLARING_DOUBLE == 0) /* isnanf or isnanl don't. */ + /* Return nonzero if VALUE is not a number. */ + __MATHDECL_1 (int,isnan,, (_Mdouble_ __value)) __attribute__ ((__const__)); ++# endif + + /* Bessel functions. */ + __MATHCALL (j0,, (_Mdouble_)); +Index: glibc-2.22/math/test-math-isinff.cc +=================================================================== +--- /dev/null ++++ glibc-2.22/math/test-math-isinff.cc +@@ -0,0 +1,48 @@ ++/* Test for bug 19439. ++ Copyright (C) 2016 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Marek Polacek , 2012. ++ ++ 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 ++ . */ ++ ++#define _GNU_SOURCE 1 ++#include ++#include ++#include ++ ++static int ++do_test (void) ++{ ++ /* Verify that isinff, isinfl, isnanf, and isnanlf are defined ++ in the header under C++11 and can be called. Without the ++ header fix this test will not compile. */ ++ if (isinff (1.0f) ++ || !isinff (INFINITY) ++ || isinfl (1.0L) ++ || !isinfl (INFINITY) ++ || isnanf (2.0f) ++ || !isnanf (NAN) ++ || isnanl (2.0L) ++ || !isnanl (NAN)) ++ { ++ printf ("FAIL: Failed to call is* functions.\n"); ++ exit (1); ++ } ++ printf ("PASS: Able to call isinff, isinfl, isnanf, and isnanl.\n"); ++ exit (0); ++} ++ ++#define TEST_FUNCTION do_test () ++#include "../test-skeleton.c"