diff options
author | Joseph Myers <joseph@codesourcery.com> | 2013-10-12 12:23:28 +0000 |
---|---|---|
committer | Joseph Myers <joseph@codesourcery.com> | 2013-10-12 12:23:28 +0000 |
commit | b7ea74f0747456c99421f14f963082b1dcb6c30d (patch) | |
tree | 2e9b1f6ee28bba4c53a305e11217c98af3b431d4 | |
parent | 8a50944770a5c638b6718bd942798b871153757f (diff) | |
download | glibc-b7ea74f0747456c99421f14f963082b1dcb6c30d.tar glibc-b7ea74f0747456c99421f14f963082b1dcb6c30d.tar.gz glibc-b7ea74f0747456c99421f14f963082b1dcb6c30d.tar.bz2 glibc-b7ea74f0747456c99421f14f963082b1dcb6c30d.zip |
soft-fp: make __unord* raise "invalid" for signaling NaNs (bug 16036).
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | soft-fp/unorddf2.c | 5 | ||||
-rw-r--r-- | soft-fp/unordsf2.c | 5 | ||||
-rw-r--r-- | soft-fp/unordtf2.c | 5 |
5 files changed, 22 insertions, 1 deletions
@@ -1,5 +1,11 @@ 2013-10-12 Joseph Myers <joseph@codesourcery.com> + [BZ #16036] + * soft-fp/unorddf2.c (__unorddf2): Raise "invalid" exception for + signaling NaN arguments. + * soft-fp/unordsf2.c (__unordsf2): Likewise. + * soft-fp/unordtf2.c (__unordtf2): Likewise. + [BZ #14910] * soft-fp/gedf2.c (__gedf2): Raise "invalid" exception for all unordered operands. @@ -14,7 +14,7 @@ Version 2.19 15681, 15723, 15734, 15735, 15736, 15748, 15749, 15754, 15760, 15797, 15844, 15849, 15855, 15856, 15857, 15859, 15867, 15886, 15887, 15890, 15892, 15893, 15895, 15897, 15905, 15909, 15919, 15921, 15923, 15939, - 15963, 15966, 15988, 16032, 16034. + 15963, 15966, 15988, 16032, 16034, 16036. * CVE-2012-4412 The strcoll implementation caches indices and rules for large collation sequences to optimize multiple passes. This cache diff --git a/soft-fp/unorddf2.c b/soft-fp/unorddf2.c index 2e77f2d8ff..bc4efa30b0 100644 --- a/soft-fp/unorddf2.c +++ b/soft-fp/unorddf2.c @@ -32,12 +32,17 @@ CMPtype __unorddf2(DFtype a, DFtype b) { + FP_DECL_EX; FP_DECL_D(A); FP_DECL_D(B); CMPtype r; + FP_INIT_EXCEPTIONS; FP_UNPACK_RAW_D(A, a); FP_UNPACK_RAW_D(B, b); FP_CMP_UNORD_D(r, A, B); + if (r && (FP_ISSIGNAN_D(A) || FP_ISSIGNAN_D(B))) + FP_SET_EXCEPTION(FP_EX_INVALID); + FP_HANDLE_EXCEPTIONS; return r; } diff --git a/soft-fp/unordsf2.c b/soft-fp/unordsf2.c index b5b5322c16..217975f000 100644 --- a/soft-fp/unordsf2.c +++ b/soft-fp/unordsf2.c @@ -32,13 +32,18 @@ CMPtype __unordsf2(SFtype a, SFtype b) { + FP_DECL_EX; FP_DECL_S(A); FP_DECL_S(B); CMPtype r; + FP_INIT_EXCEPTIONS; FP_UNPACK_RAW_S(A, a); FP_UNPACK_RAW_S(B, b); FP_CMP_UNORD_S(r, A, B); + if (r && (FP_ISSIGNAN_S(A) || FP_ISSIGNAN_S(B))) + FP_SET_EXCEPTION(FP_EX_INVALID); + FP_HANDLE_EXCEPTIONS; return r; } diff --git a/soft-fp/unordtf2.c b/soft-fp/unordtf2.c index 1a85c252c1..3650cf461b 100644 --- a/soft-fp/unordtf2.c +++ b/soft-fp/unordtf2.c @@ -32,13 +32,18 @@ CMPtype __unordtf2(TFtype a, TFtype b) { + FP_DECL_EX; FP_DECL_Q(A); FP_DECL_Q(B); CMPtype r; + FP_INIT_EXCEPTIONS; FP_UNPACK_RAW_Q(A, a); FP_UNPACK_RAW_Q(B, b); FP_CMP_UNORD_Q(r, A, B); + if (r && (FP_ISSIGNAN_Q(A) || FP_ISSIGNAN_Q(B))) + FP_SET_EXCEPTION(FP_EX_INVALID); + FP_HANDLE_EXCEPTIONS; return r; } |