mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-10 07:10:06 +00:00
Fix missing underflow from cexp (bug 14478).
This commit is contained in:
parent
5b535ac419
commit
05e166c887
@ -1,3 +1,12 @@
|
||||
2013-04-03 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
[BZ #14478]
|
||||
* math/s_cexp.c (__cexp): Ensure underflow exception occurs for
|
||||
underflowed result.
|
||||
* math/s_cexpf.c (__cexpf): Likewise.
|
||||
* math/s_cexpl.c (__cexpl): Likewise.
|
||||
* math/libm-test.inc (cexp_test): Add more tests.
|
||||
|
||||
2013-04-03 Andreas Schwab <schwab@suse.de>
|
||||
|
||||
[BZ #15330]
|
||||
|
8
NEWS
8
NEWS
@ -10,10 +10,10 @@ Version 2.18
|
||||
* The following bugs are resolved with this release:
|
||||
|
||||
10357, 11120, 11561, 12723, 13550, 13889, 13951, 14142, 14176, 14200,
|
||||
14317, 14327, 14496, 14812, 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,
|
||||
15327, 15330.
|
||||
14317, 14327, 14478, 14496, 14812, 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, 15327, 15330.
|
||||
|
||||
* CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
|
||||
#15078).
|
||||
|
@ -4794,6 +4794,9 @@ cexp_test (void)
|
||||
TEST_c_c (cexp, 1e6, min_value, plus_infty, plus_infty, OVERFLOW_EXCEPTION);
|
||||
TEST_c_c (cexp, 1e6, -min_value, plus_infty, minus_infty, OVERFLOW_EXCEPTION);
|
||||
|
||||
TEST_c_c (cexp, min_value, min_subnorm_value, 1.0, min_subnorm_value, UNDERFLOW_EXCEPTION);
|
||||
TEST_c_c (cexp, min_value, -min_subnorm_value, 1.0, -min_subnorm_value, UNDERFLOW_EXCEPTION);
|
||||
|
||||
END (cexp, complex);
|
||||
}
|
||||
|
||||
|
@ -74,6 +74,18 @@ __cexp (__complex__ double x)
|
||||
__real__ retval = exp_val * cosix;
|
||||
__imag__ retval = exp_val * 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
|
||||
{
|
||||
|
@ -74,6 +74,18 @@ __cexpf (__complex__ float x)
|
||||
__real__ retval = exp_val * cosix;
|
||||
__imag__ retval = exp_val * 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
|
||||
{
|
||||
|
@ -74,6 +74,18 @@ __cexpl (__complex__ long double x)
|
||||
__real__ retval = exp_val * cosix;
|
||||
__imag__ retval = exp_val * 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
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user