Discussion:
[Python-3000-checkins] r65965 - in python/branches/py3k: Objects/floatobject.c
mark.dickinson
2008-08-21 21:40:15 UTC
Permalink
Author: mark.dickinson
Date: Thu Aug 21 23:40:15 2008
New Revision: 65965

Log:
Merged revisions 65964 via svnmerge from
svn+ssh://pythondev at svn.python.org/python/trunk

........
r65964 | mark.dickinson | 2008-08-21 22:38:38 +0100 (Thu, 21 Aug 2008) | 7 lines

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.
........


Modified:
python/branches/py3k/ (props changed)
python/branches/py3k/Objects/floatobject.c

Modified: python/branches/py3k/Objects/floatobject.c
==============================================================================
--- python/branches/py3k/Objects/floatobject.c (original)
+++ python/branches/py3k/Objects/floatobject.c Thu Aug 21 23:40:15 2008
@@ -1041,7 +1041,6 @@
static int
hex_from_char(char c) {
int x;
- assert(isxdigit(c));
switch(c) {
case '0':
x = 0;
@@ -1271,12 +1270,12 @@

/* 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;
}
@@ -1298,10 +1297,10 @@
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);
}

Loading...