]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Fix cproj handling of (finite, NaN) arguments (bug 15531).
authorJoseph Myers <joseph@codesourcery.com>
Tue, 20 Aug 2013 19:41:15 +0000 (19:41 +0000)
committerAdhemerval Zanella <azanella@linux.vnet.ibm.com>
Thu, 31 Oct 2013 15:01:09 +0000 (10:01 -0500)
backport of c980f2f4fe0f5d301f706017a1f7e4e942193ec0

ChangeLog
NEWS
math/libm-test.inc
math/s_cproj.c
math/s_cprojf.c
math/s_cprojl.c
sysdeps/ieee754/ldbl-128ibm/s_cprojl.c

index 9ad07190e0a21f62654a0d755c428e6b4f7c0767..bf25bd6640956eaa330f0b5466c421790e4fe071 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2013-08-20  Joseph Myers  <joseph@codesourcery.com>
+
+       [BZ #15531]
+       * math/s_cproj.c (__cproj): Only return an infinity if one part of
+       argument is infinite.
+       * math/s_cprojf.c (__cprojf): Likewise.
+       * math/s_cprojl.c (__cprojl): Likewise.
+       * sysdeps/ieee754/ldbl-128ibm/s_cprojl.c (__cprojl): Likewise.
+       * math/libm-test.inc (cproj_test_data): Add more tests.
+
+       * sysdeps/unix/sysv/linux/mmap64.c: Include <string.h>.
+
+       * sysdeps/unix/sysv/linux/mmap64.c (__mmap64)
+       [MMAP2_PAGE_SHIFT == -1]: Use __getpagesize to determine page
+       size.  Use __ffs to determine corresponding shift.
+
 2013-08-20  Andreas Arnez  <arnez@linux.vnet.ibm.com>
 
        * elf/setup-vdso.h (setup_vdso): Fix missing string termination.
diff --git a/NEWS b/NEWS
index 4d168c50ba57070909c3fcdb386451d3d8aaea7e..ab3f353b83b0e1d639704734b202fd6b38ad4335 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -16,13 +16,13 @@ Version 2.18
   14952, 14964, 14981, 14982, 14985, 14991, 14994, 14996, 15000, 15003,
   15006, 15007, 15014, 15020, 15022, 15023, 15036, 15054, 15055, 15062,
   15078, 15084, 15085, 15086, 15100, 15160, 15214, 15221, 15232, 15234,
-  15283, 15285, 15287, 15304, 15305, 15307, 15309, 15327, 15330, 15335,
-  15336, 15337, 15339, 15342, 15346, 15359, 15361, 15366, 15380, 15381,
-  15394, 15395, 15405, 15406, 15409, 15416, 15418, 15419, 15423, 15424,
-  15426, 15429, 15431, 15432, 15441, 15442, 15448, 15465, 15480, 15485,
-  15488, 15490, 15492, 15493, 15497, 15506, 15529, 15536, 15553, 15577,
-  15583, 15618, 15627, 15631, 15654, 15655, 15666, 15667, 15674, 15711,
-  15755, 15759.
+  15283, 15285, 15287, 15304, 15305, 15307, 15309, 15327, 15330, 15331,
+  15335, 15336, 15337, 15339, 15342, 15346, 15359, 15361, 15366, 15380,
+  15381, 15394, 15395, 15405, 15406, 15409, 15416, 15418, 15419, 15423,
+  15424, 15426, 15429, 15431, 15432, 15441, 15442, 15448, 15465, 15480,
+  15485, 15488, 15490, 15492, 15493, 15497, 15506, 15529, 15536, 15553,
+  15577, 15583, 15618, 15627, 15631, 15654, 15655, 15666, 15667, 15674,
+  15711, 15755, 15759.
 
 * CVE-2013-2207 Incorrectly granting access to another user's pseudo-terminal
   has been fixed by disabling the use of pt_chown (Bugzilla #15755).
index 2324d4fd5224bbcf42b3d29829f9c8a833718aca..3b382af104960273798a18fe1c4bdc49c64481b9 100644 (file)
@@ -7061,11 +7061,51 @@ static const struct test_c_c_data cproj_test_data[] =
 
     TEST_c_c (cproj, qnan_value, qnan_value, qnan_value, qnan_value, NO_INEXACT_EXCEPTION),
 
+    TEST_c_c (cproj, plus_zero, qnan_value, plus_zero, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, minus_zero, qnan_value, minus_zero, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, qnan_value, plus_zero, qnan_value, plus_zero, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, qnan_value, minus_zero, qnan_value, minus_zero, NO_INEXACT_EXCEPTION),
+
+    TEST_c_c (cproj, 1.0, qnan_value, 1.0, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, -1.0, qnan_value, -1.0, qnan_value, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, qnan_value, 1.0, qnan_value, 1.0, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, qnan_value, -1.0, qnan_value, -1.0, NO_INEXACT_EXCEPTION),
+
     TEST_c_c (cproj, plus_infty, plus_infty, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
     TEST_c_c (cproj, plus_infty, minus_infty, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
     TEST_c_c (cproj, minus_infty, plus_infty, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
     TEST_c_c (cproj, minus_infty, minus_infty, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
 
+    TEST_c_c (cproj, plus_infty, plus_zero, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, plus_infty, minus_zero, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, minus_infty, plus_zero, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, minus_infty, minus_zero, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
+
+    TEST_c_c (cproj, plus_zero, plus_infty, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, plus_zero, minus_infty, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, minus_zero, plus_infty, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, minus_zero, minus_infty, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
+
+    TEST_c_c (cproj, plus_infty, 1.0, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, plus_infty, -1.0, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, minus_infty, 1.0, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, minus_infty, -1.0, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
+
+    TEST_c_c (cproj, 1.0, plus_infty, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, 1.0, minus_infty, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, -1.0, plus_infty, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, -1.0, minus_infty, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
+
+    TEST_c_c (cproj, plus_infty, qnan_value, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, plus_infty, -qnan_value, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, minus_infty, qnan_value, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, minus_infty, -qnan_value, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
+
+    TEST_c_c (cproj, qnan_value, plus_infty, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, qnan_value, minus_infty, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, -qnan_value, plus_infty, plus_infty, 0.0, NO_INEXACT_EXCEPTION),
+    TEST_c_c (cproj, -qnan_value, minus_infty, plus_infty, minus_zero, NO_INEXACT_EXCEPTION),
+
     TEST_c_c (cproj, 1.0, 0.0, 1.0, 0.0, NO_INEXACT_EXCEPTION),
     TEST_c_c (cproj, 2.0, 3.0, 2.0, 3.0, NO_INEXACT_EXCEPTION),
   };
index c0be4618dbff9052f42405f38ef924ed7d257024..98f1a4c4b2e0831dc9bdc4690028283f38c67cd6 100644 (file)
@@ -24,9 +24,7 @@
 __complex__ double
 __cproj (__complex__ double x)
 {
-  if (isnan (__real__ x) && isnan (__imag__ x))
-    return x;
-  else if (!isfinite (__real__ x) || !isfinite (__imag__ x))
+  if (__isinf_ns (__real__ x) || __isinf_ns (__imag__ x))
     {
       __complex__ double res;
 
index 188bbe3beb37036058e8af67e5db5a5b89393a40..e4dbc181bd336fcab00373218166d710a11eee4f 100644 (file)
@@ -24,9 +24,7 @@
 __complex__ float
 __cprojf (__complex__ float x)
 {
-  if (isnan (__real__ x) && isnan (__imag__ x))
-    return x;
-  else if (!isfinite (__real__ x) || !isfinite (__imag__ x))
+  if (__isinf_nsf (__real__ x) || __isinf_nsf (__imag__ x))
     {
       __complex__ float res;
 
index fbdf2797e4eb8a73b2fa1e0cc77a95b61a7f60fd..b564a83e6313deacfeb4cfd20cce28a17de9a47f 100644 (file)
@@ -24,9 +24,7 @@
 __complex__ long double
 __cprojl (__complex__ long double x)
 {
-  if (isnan (__real__ x) && isnan (__imag__ x))
-    return x;
-  else if (!isfinite (__real__ x) || !isfinite (__imag__ x))
+  if (__isinf_nsl (__real__ x) || __isinf_nsl (__imag__ x))
     {
       __complex__ long double res;
 
index 3b4af5423a5291c4eb4fa8d2d8434e72da7c68c3..a344e9288fb8be82f6d7efda661b863e8210df0c 100644 (file)
@@ -24,9 +24,7 @@
 __complex__ long double
 __cprojl (__complex__ long double x)
 {
-  if (isnan (__real__ x) && isnan (__imag__ x))
-    return x;
-  else if (!isfinite (__real__ x) || !isfinite (__imag__ x))
+  if (__isinf_nsl (__real__ x) || __isinf_nsl (__imag__ x))
     {
       __complex__ long double res;