1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-08 17:42:12 +03:00

soft-fp: make __unord* raise "invalid" for signaling NaNs (bug 16036).

This commit is contained in:
Joseph Myers
2013-10-12 12:23:28 +00:00
parent 8a50944770
commit b7ea74f074
5 changed files with 22 additions and 1 deletions

View File

@@ -1,5 +1,11 @@
2013-10-12 Joseph Myers <joseph@codesourcery.com> 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] [BZ #14910]
* soft-fp/gedf2.c (__gedf2): Raise "invalid" exception for all * soft-fp/gedf2.c (__gedf2): Raise "invalid" exception for all
unordered operands. unordered operands.

2
NEWS
View File

@@ -14,7 +14,7 @@ Version 2.19
15681, 15723, 15734, 15735, 15736, 15748, 15749, 15754, 15760, 15797, 15681, 15723, 15734, 15735, 15736, 15748, 15749, 15754, 15760, 15797,
15844, 15849, 15855, 15856, 15857, 15859, 15867, 15886, 15887, 15890, 15844, 15849, 15855, 15856, 15857, 15859, 15867, 15886, 15887, 15890,
15892, 15893, 15895, 15897, 15905, 15909, 15919, 15921, 15923, 15939, 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 * CVE-2012-4412 The strcoll implementation caches indices and rules for
large collation sequences to optimize multiple passes. This cache large collation sequences to optimize multiple passes. This cache

View File

@@ -32,12 +32,17 @@
CMPtype __unorddf2(DFtype a, DFtype b) CMPtype __unorddf2(DFtype a, DFtype b)
{ {
FP_DECL_EX;
FP_DECL_D(A); FP_DECL_D(B); FP_DECL_D(A); FP_DECL_D(B);
CMPtype r; CMPtype r;
FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_D(A, a); FP_UNPACK_RAW_D(A, a);
FP_UNPACK_RAW_D(B, b); FP_UNPACK_RAW_D(B, b);
FP_CMP_UNORD_D(r, A, 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; return r;
} }

View File

@@ -32,13 +32,18 @@
CMPtype __unordsf2(SFtype a, SFtype b) CMPtype __unordsf2(SFtype a, SFtype b)
{ {
FP_DECL_EX;
FP_DECL_S(A); FP_DECL_S(A);
FP_DECL_S(B); FP_DECL_S(B);
CMPtype r; CMPtype r;
FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_S(A, a); FP_UNPACK_RAW_S(A, a);
FP_UNPACK_RAW_S(B, b); FP_UNPACK_RAW_S(B, b);
FP_CMP_UNORD_S(r, A, 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; return r;
} }

View File

@@ -32,13 +32,18 @@
CMPtype __unordtf2(TFtype a, TFtype b) CMPtype __unordtf2(TFtype a, TFtype b)
{ {
FP_DECL_EX;
FP_DECL_Q(A); FP_DECL_Q(A);
FP_DECL_Q(B); FP_DECL_Q(B);
CMPtype r; CMPtype r;
FP_INIT_EXCEPTIONS;
FP_UNPACK_RAW_Q(A, a); FP_UNPACK_RAW_Q(A, a);
FP_UNPACK_RAW_Q(B, b); FP_UNPACK_RAW_Q(B, b);
FP_CMP_UNORD_Q(r, A, 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; return r;
} }