mirror of git://sourceware.org/git/glibc.git
This commit is contained in:
parent
d91da4ce87
commit
8b43a0c9f2
|
@ -1,5 +1,10 @@
|
||||||
2013-04-05 Thomas Schwinge <thomas@codesourcery.com>
|
2013-04-05 Thomas Schwinge <thomas@codesourcery.com>
|
||||||
|
|
||||||
|
[BZ #15335, #15342]
|
||||||
|
* sysdeps/ieee754/dbl-64/upow.h (NaNQ): Remove definitions.
|
||||||
|
* sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Instead, use
|
||||||
|
input NaN values or generate a qNaN by arithmetic operation.
|
||||||
|
|
||||||
* sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Remove
|
* sysdeps/ieee754/dbl-64/e_pow.c (__ieee754_pow): Remove
|
||||||
unreachable code.
|
unreachable code.
|
||||||
|
|
||||||
|
|
2
NEWS
2
NEWS
|
@ -13,7 +13,7 @@ Version 2.18
|
||||||
14317, 14327, 14478, 14496, 14812, 14920, 14964, 14981, 14982, 14985,
|
14317, 14327, 14478, 14496, 14812, 14920, 14964, 14981, 14982, 14985,
|
||||||
14994, 14996, 15003, 15006, 15020, 15023, 15036, 15054, 15055, 15062,
|
14994, 14996, 15003, 15006, 15020, 15023, 15036, 15054, 15055, 15062,
|
||||||
15078, 15160, 15214, 15232, 15234, 15283, 15285, 15287, 15304, 15305,
|
15078, 15160, 15214, 15232, 15234, 15283, 15285, 15287, 15304, 15305,
|
||||||
15307, 15327, 15330, 15337.
|
15307, 15327, 15330, 15335, 15337, 15342.
|
||||||
|
|
||||||
* CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
|
* CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
|
||||||
#15078).
|
#15078).
|
||||||
|
|
|
@ -71,8 +71,9 @@ __ieee754_pow(double x, double y) {
|
||||||
u.x=x;
|
u.x=x;
|
||||||
if (v.i[LOW_HALF] == 0) { /* of y */
|
if (v.i[LOW_HALF] == 0) { /* of y */
|
||||||
qx = u.i[HIGH_HALF]&0x7fffffff;
|
qx = u.i[HIGH_HALF]&0x7fffffff;
|
||||||
/* Checking if x is not too small to compute */
|
/* Is x a NaN? */
|
||||||
if (((qx==0x7ff00000)&&(u.i[LOW_HALF]!=0))||(qx>0x7ff00000)) return NaNQ.x;
|
if (((qx == 0x7ff00000) && (u.i[LOW_HALF] != 0)) || (qx > 0x7ff00000))
|
||||||
|
return x;
|
||||||
if (y == 1.0) return x;
|
if (y == 1.0) return x;
|
||||||
if (y == 2.0) return x*x;
|
if (y == 2.0) return x*x;
|
||||||
if (y == -1.0) return 1.0/x;
|
if (y == -1.0) return 1.0/x;
|
||||||
|
@ -111,7 +112,7 @@ __ieee754_pow(double x, double y) {
|
||||||
|
|
||||||
if (x == 0) {
|
if (x == 0) {
|
||||||
if (((v.i[HIGH_HALF] & 0x7fffffff) == 0x7ff00000 && v.i[LOW_HALF] != 0)
|
if (((v.i[HIGH_HALF] & 0x7fffffff) == 0x7ff00000 && v.i[LOW_HALF] != 0)
|
||||||
|| (v.i[HIGH_HALF] & 0x7fffffff) > 0x7ff00000)
|
|| (v.i[HIGH_HALF] & 0x7fffffff) > 0x7ff00000) /* NaN */
|
||||||
return y;
|
return y;
|
||||||
if (ABS(y) > 1.0e20) return (y>0)?0:1.0/0.0;
|
if (ABS(y) > 1.0e20) return (y>0)?0:1.0/0.0;
|
||||||
k = checkint(y);
|
k = checkint(y);
|
||||||
|
@ -124,9 +125,10 @@ __ieee754_pow(double x, double y) {
|
||||||
qx = u.i[HIGH_HALF]&0x7fffffff; /* no sign */
|
qx = u.i[HIGH_HALF]&0x7fffffff; /* no sign */
|
||||||
qy = v.i[HIGH_HALF]&0x7fffffff; /* no sign */
|
qy = v.i[HIGH_HALF]&0x7fffffff; /* no sign */
|
||||||
|
|
||||||
if (qx >= 0x7ff00000 && (qx > 0x7ff00000 || u.i[LOW_HALF] != 0)) return NaNQ.x;
|
if (qx >= 0x7ff00000 && (qx > 0x7ff00000 || u.i[LOW_HALF] != 0)) /* NaN */
|
||||||
if (qy >= 0x7ff00000 && (qy > 0x7ff00000 || v.i[LOW_HALF] != 0))
|
return x;
|
||||||
return x == 1.0 ? 1.0 : NaNQ.x;
|
if (qy >= 0x7ff00000 && (qy > 0x7ff00000 || v.i[LOW_HALF] != 0)) /* NaN */
|
||||||
|
return x == 1.0 ? 1.0 : y;
|
||||||
|
|
||||||
/* if x<0 */
|
/* if x<0 */
|
||||||
if (u.i[HIGH_HALF] < 0) {
|
if (u.i[HIGH_HALF] < 0) {
|
||||||
|
@ -139,7 +141,7 @@ __ieee754_pow(double x, double y) {
|
||||||
}
|
}
|
||||||
else if (qx == 0x7ff00000)
|
else if (qx == 0x7ff00000)
|
||||||
return y < 0 ? 0.0 : INF.x;
|
return y < 0 ? 0.0 : INF.x;
|
||||||
return NaNQ.x; /* y not integer and x<0 */
|
return (x - x) / (x - x); /* y not integer and x<0 */
|
||||||
}
|
}
|
||||||
else if (qx == 0x7ff00000)
|
else if (qx == 0x7ff00000)
|
||||||
{
|
{
|
||||||
|
|
|
@ -34,7 +34,6 @@
|
||||||
/**/ nZERO = {{0x80000000, 0}}, /* -0.0 */
|
/**/ nZERO = {{0x80000000, 0}}, /* -0.0 */
|
||||||
/**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */
|
/**/ INF = {{0x7ff00000, 0x00000000}}, /* INF */
|
||||||
/**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */
|
/**/ nINF = {{0xfff00000, 0x00000000}}, /* -INF */
|
||||||
/**/ NaNQ = {{0x7ff80000, 0x00000000}}, /* NaNQ */
|
|
||||||
/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2) */
|
/**/ sqrt_2 = {{0x3ff6a09e, 0x667f3bcc}}, /* sqrt(2) */
|
||||||
/**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */
|
/**/ ln2a = {{0x3fe62e42, 0xfefa3800}}, /* ln(2) 43 bits */
|
||||||
/**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */
|
/**/ ln2b = {{0x3d2ef357, 0x93c76730}}, /* ln(2)-ln2a */
|
||||||
|
@ -49,7 +48,6 @@
|
||||||
/**/ nZERO = {{0, 0x80000000}}, /* -0.0 */
|
/**/ nZERO = {{0, 0x80000000}}, /* -0.0 */
|
||||||
/**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */
|
/**/ INF = {{0x00000000, 0x7ff00000}}, /* INF */
|
||||||
/**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */
|
/**/ nINF = {{0x00000000, 0xfff00000}}, /* -INF */
|
||||||
/**/ NaNQ = {{0x00000000, 0x7ff80000}}, /* NaNQ */
|
|
||||||
/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */
|
/**/ sqrt_2 = {{0x667f3bcc, 0x3ff6a09e}}, /* sqrt(2) */
|
||||||
/**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */
|
/**/ ln2a = {{0xfefa3800, 0x3fe62e42}}, /* ln(2) 43 bits */
|
||||||
/**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */
|
/**/ ln2b = {{0x93c76730, 0x3d2ef357}}, /* ln(2)-ln2a */
|
||||||
|
|
Loading…
Reference in New Issue