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:
@@ -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
2
NEWS
@@ -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
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user