mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 17:53:37 +08:00
Fix csin, csinh, ccos, ccosh missing underflows (bug 15405).
This commit is contained in:
parent
aa630f590c
commit
f0302940e7
18
ChangeLog
18
ChangeLog
@ -1,3 +1,21 @@
|
||||
2013-04-26 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
[BZ #15405]
|
||||
* math/s_ccosh.c (__ccosh): Ensure underflow exception occurs for
|
||||
underflowed result.
|
||||
* math/s_ccoshf.c (__ccoshf): Likewise.
|
||||
* math/s_ccoshl.c (__ccoshl): Likewise.
|
||||
* math/s_csin.c (__csin): Likewise.
|
||||
* math/s_csinf.c (__csinf): Likewise.
|
||||
* math/s_csinh.c (__csinh): Likewise.
|
||||
* math/s_csinhf.c (__csinhf): Likewise.
|
||||
* math/s_csinhl.c (__csinhl): Likewise.
|
||||
* math/s_csinl.c (__csinl): Likewise.
|
||||
* math/libm-test.inc (ccos_test): Add more tests.
|
||||
(ccosh_test): Likewise.
|
||||
(csin_test): Likewise.
|
||||
(csinh_test): Likewise.
|
||||
|
||||
2013-04-26 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
|
||||
|
||||
* sysdeps/powerpc/power5/fpu/s_modf.c: Moved to ...
|
||||
|
2
NEWS
2
NEWS
@ -14,7 +14,7 @@ Version 2.18
|
||||
14812, 14888, 14920, 14964, 14981, 14982, 14985, 14994, 14996, 15003,
|
||||
15006, 15020, 15023, 15036, 15054, 15055, 15062, 15078, 15160, 15214,
|
||||
15232, 15234, 15283, 15285, 15287, 15304, 15305, 15307, 15309, 15327,
|
||||
15330, 15335, 15336, 15337, 15342, 15346, 15361, 15366, 15394.
|
||||
15330, 15335, 15336, 15337, 15342, 15346, 15361, 15366, 15394, 15405.
|
||||
|
||||
* CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
|
||||
#15078).
|
||||
|
@ -4570,6 +4570,9 @@ ccos_test (void)
|
||||
TEST_c_c (ccos, 0x1p-16434L, 22730, plus_infty, -1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
|
||||
#endif
|
||||
|
||||
TEST_c_c (ccos, min_subnorm_value * 0x1p120, 0x1p-120, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
|
||||
TEST_c_c (ccos, 0x1p-120, min_subnorm_value * 0x1p120, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
|
||||
|
||||
END (ccos, complex);
|
||||
}
|
||||
|
||||
@ -4670,6 +4673,9 @@ ccosh_test (void)
|
||||
TEST_c_c (ccosh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
|
||||
#endif
|
||||
|
||||
TEST_c_c (ccosh, min_subnorm_value * 0x1p120, 0x1p-120, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
|
||||
TEST_c_c (ccosh, 0x1p-120, min_subnorm_value * 0x1p120, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
|
||||
|
||||
END (ccosh, complex);
|
||||
}
|
||||
|
||||
@ -5898,6 +5904,9 @@ csin_test (void)
|
||||
TEST_c_c (csin, 0x1p-16434L, 22730, 1.217853148905605987081057582351152052687e4924L, plus_infty, OVERFLOW_EXCEPTION);
|
||||
#endif
|
||||
|
||||
TEST_c_c (csin, min_subnorm_value, min_value, min_subnorm_value, min_value, UNDERFLOW_EXCEPTION);
|
||||
TEST_c_c (csin, min_value, min_subnorm_value, min_value, min_subnorm_value, UNDERFLOW_EXCEPTION);
|
||||
|
||||
END (csin, complex);
|
||||
}
|
||||
|
||||
@ -5997,6 +6006,9 @@ csinh_test (void)
|
||||
TEST_c_c (csinh, 22730, 0x1p-16434L, plus_infty, 1.217853148905605987081057582351152052687e4924L, OVERFLOW_EXCEPTION);
|
||||
#endif
|
||||
|
||||
TEST_c_c (csinh, min_subnorm_value, min_value, min_subnorm_value, min_value, UNDERFLOW_EXCEPTION);
|
||||
TEST_c_c (csinh, min_value, min_subnorm_value, min_value, min_subnorm_value, UNDERFLOW_EXCEPTION);
|
||||
|
||||
END (csinh, complex);
|
||||
}
|
||||
|
||||
|
@ -82,6 +82,19 @@ __ccosh (__complex__ double x)
|
||||
__real__ retval = __ieee754_cosh (__real__ x) * cosix;
|
||||
__imag__ retval = __ieee754_sinh (__real__ x) * sinix;
|
||||
}
|
||||
|
||||
if (fabs (__real__ retval) < DBL_MIN)
|
||||
{
|
||||
volatile double force_underflow
|
||||
= __real__ retval * __real__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
if (fabs (__imag__ retval) < DBL_MIN)
|
||||
{
|
||||
volatile double force_underflow
|
||||
= __imag__ retval * __imag__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -82,6 +82,19 @@ __ccoshf (__complex__ float x)
|
||||
__real__ retval = __ieee754_coshf (__real__ x) * cosix;
|
||||
__imag__ retval = __ieee754_sinhf (__real__ x) * sinix;
|
||||
}
|
||||
|
||||
if (fabsf (__real__ retval) < FLT_MIN)
|
||||
{
|
||||
volatile float force_underflow
|
||||
= __real__ retval * __real__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
if (fabsf (__imag__ retval) < FLT_MIN)
|
||||
{
|
||||
volatile float force_underflow
|
||||
= __imag__ retval * __imag__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -82,6 +82,19 @@ __ccoshl (__complex__ long double x)
|
||||
__real__ retval = __ieee754_coshl (__real__ x) * cosix;
|
||||
__imag__ retval = __ieee754_sinhl (__real__ x) * sinix;
|
||||
}
|
||||
|
||||
if (fabsl (__real__ retval) < LDBL_MIN)
|
||||
{
|
||||
volatile long double force_underflow
|
||||
= __real__ retval * __real__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
if (fabsl (__imag__ retval) < LDBL_MIN)
|
||||
{
|
||||
volatile long double force_underflow
|
||||
= __imag__ retval * __imag__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -88,6 +88,19 @@ __csin (__complex__ double x)
|
||||
|
||||
if (negate)
|
||||
__real__ retval = -__real__ retval;
|
||||
|
||||
if (fabs (__real__ retval) < DBL_MIN)
|
||||
{
|
||||
volatile double force_underflow
|
||||
= __real__ retval * __real__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
if (fabs (__imag__ retval) < DBL_MIN)
|
||||
{
|
||||
volatile double force_underflow
|
||||
= __imag__ retval * __imag__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -88,6 +88,19 @@ __csinf (__complex__ float x)
|
||||
|
||||
if (negate)
|
||||
__real__ retval = -__real__ retval;
|
||||
|
||||
if (fabsf (__real__ retval) < FLT_MIN)
|
||||
{
|
||||
volatile float force_underflow
|
||||
= __real__ retval * __real__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
if (fabsf (__imag__ retval) < FLT_MIN)
|
||||
{
|
||||
volatile float force_underflow
|
||||
= __imag__ retval * __imag__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -88,6 +88,19 @@ __csinh (__complex__ double x)
|
||||
|
||||
if (negate)
|
||||
__real__ retval = -__real__ retval;
|
||||
|
||||
if (fabs (__real__ retval) < DBL_MIN)
|
||||
{
|
||||
volatile double force_underflow
|
||||
= __real__ retval * __real__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
if (fabs (__imag__ retval) < DBL_MIN)
|
||||
{
|
||||
volatile double force_underflow
|
||||
= __imag__ retval * __imag__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -88,6 +88,19 @@ __csinhf (__complex__ float x)
|
||||
|
||||
if (negate)
|
||||
__real__ retval = -__real__ retval;
|
||||
|
||||
if (fabsf (__real__ retval) < FLT_MIN)
|
||||
{
|
||||
volatile float force_underflow
|
||||
= __real__ retval * __real__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
if (fabsf (__imag__ retval) < FLT_MIN)
|
||||
{
|
||||
volatile float force_underflow
|
||||
= __imag__ retval * __imag__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -88,6 +88,19 @@ __csinhl (__complex__ long double x)
|
||||
|
||||
if (negate)
|
||||
__real__ retval = -__real__ retval;
|
||||
|
||||
if (fabsl (__real__ retval) < LDBL_MIN)
|
||||
{
|
||||
volatile long double force_underflow
|
||||
= __real__ retval * __real__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
if (fabsl (__imag__ retval) < LDBL_MIN)
|
||||
{
|
||||
volatile long double force_underflow
|
||||
= __imag__ retval * __imag__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -88,6 +88,19 @@ __csinl (__complex__ long double x)
|
||||
|
||||
if (negate)
|
||||
__real__ retval = -__real__ retval;
|
||||
|
||||
if (fabsl (__real__ retval) < LDBL_MIN)
|
||||
{
|
||||
volatile long double force_underflow
|
||||
= __real__ retval * __real__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
if (fabsl (__imag__ retval) < LDBL_MIN)
|
||||
{
|
||||
volatile long double force_underflow
|
||||
= __imag__ retval * __imag__ retval;
|
||||
(void) force_underflow;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user