Merged revisions 65964 via svnmerge from
svn+ssh://pythondev@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.
........
diff --git a/Objects/floatobject.c b/Objects/floatobject.c
index 8cebc9f..63d67ab 100644
--- a/Objects/floatobject.c
+++ b/Objects/floatobject.c
@@ -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);
 	}