summaryrefslogtreecommitdiff
path: root/Objects/floatobject.c
diff options
context:
space:
mode:
authorMark Dickinson <dickinsm@gmail.com>2008-08-21 21:38:38 +0000
committerMark Dickinson <dickinsm@gmail.com>2008-08-21 21:38:38 +0000
commit62334bccba2c29b9528062fb04b0d63ae99e263d (patch)
tree9896424e343a835152ede05d36b102bd5b518bff /Objects/floatobject.c
parentb5682823b34479b7e0680761b9ec6f8374c852b9 (diff)
downloadcpython-62334bccba2c29b9528062fb04b0d63ae99e263d.tar.gz
issue 3633: Solaris allows fullwidth Unicode digits in isxdigit, so
rewrite float.fromhex to only allow ASCII hex digits on all platforms. (Tests for this are already present, but the test_float failures on Solaris hadn't been noticed before.) Reviewed by Antoine Pitrou.
Diffstat (limited to 'Objects/floatobject.c')
-rw-r--r--Objects/floatobject.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index f70771ee60..0b067eb37c 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -1126,7 +1126,6 @@ char_from_hex(int x)
static int
hex_from_char(char c) {
int x;
- assert(isxdigit(c));
switch(c) {
case '0':
x = 0;
@@ -1355,12 +1354,12 @@ float_fromhex(PyObject *cls, PyObject *arg)
/* coefficient: <integer> [. <fraction>] */
coeff_start = s;
- while (isxdigit(*s))
+ while (hex_from_char(*s) >= 0)
s++;
s_store = s;
if (*s == '.') {
s++;
- while (isxdigit(*s))
+ while (hex_from_char(*s) >= 0)
s++;
coeff_end = s-1;
}
@@ -1382,10 +1381,10 @@ float_fromhex(PyObject *cls, PyObject *arg)
exp_start = s;
if (*s == '-' || *s == '+')
s++;
- if (!isdigit(*s))
+ if (!('0' <= *s && *s <= '9'))
goto parse_error;
s++;
- while (isdigit(*s))
+ while ('0' <= *s && *s <= '9')
s++;
exp = strtol(exp_start, NULL, 10);
}