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>
[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.

2
NEWS
View File

@ -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

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}