summaryrefslogtreecommitdiffstats
path: root/Modules
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2000-05-08 14:29:38 (GMT)
committerGuido van Rossum <guido@python.org>2000-05-08 14:29:38 (GMT)
commitc554505ca1318fd7aed32086ceb4b53ae767ffa3 (patch)
treea1b19d31b3d48ee03d28585b6484f3e93dc66c48 /Modules
parent23ef82ffe330c16cac7406c202ce55cc0d828f0a (diff)
downloadcpython-c554505ca1318fd7aed32086ceb4b53ae767ffa3.zip
cpython-c554505ca1318fd7aed32086ceb4b53ae767ffa3.tar.gz
cpython-c554505ca1318fd7aed32086ceb4b53ae767ffa3.tar.bz2
Trent Mick:
Fix overflow bug in ldexp(x, exp). The 'exp' argument maps to a C int for the math library call [double ldexp(double, int)], however the 'd' PyArg_ParseTuple formatter was used to yield a double, which was subsequently cast to an int. This could overflow. [GvR: mysteriously, on Solaris 2.7, ldexp(1, 2147483647) returns Inf while ldexp(1, 2147483646) raises OverflowError; this seems a bug in the math library (it also takes a real long time to compute the Inf outcome). Does this point to a bug in the CHECK() macro? It should have discovered that the result was outside the HUGE_VAL range.]
Diffstat (limited to 'Modules')
-rw-r--r--Modules/mathmodule.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c
index a241c60..d01de90 100644
--- a/Modules/mathmodule.c
+++ b/Modules/mathmodule.c
@@ -196,13 +196,13 @@ math_ldexp(self, args)
PyObject *self;
PyObject *args;
{
- double x, y;
- /* Cheat -- allow float as second argument */
- if (! PyArg_Parse(args, "(dd)", &x, &y))
+ double x;
+ int exp;
+ if (! PyArg_Parse(args, "(di)", &x, &exp))
return NULL;
errno = 0;
PyFPE_START_PROTECT("ldexp", return 0)
- x = ldexp(x, (int)y);
+ x = ldexp(x, exp);
PyFPE_END_PROTECT(x)
CHECK(x);
if (errno != 0)