]> granicus.if.org Git - python/commitdiff
Merged revisions 65964 via svnmerge from
authorMark Dickinson <dickinsm@gmail.com>
Thu, 21 Aug 2008 21:40:15 +0000 (21:40 +0000)
committerMark Dickinson <dickinsm@gmail.com>
Thu, 21 Aug 2008 21:40:15 +0000 (21:40 +0000)
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.
........

Objects/floatobject.c

index 8cebc9f159adc9d211b3faa6e3ff06e2afe119ff..63d67ab796d05d90e6a1d81faee53b6b8bff99ed 100644 (file)
@@ -1041,7 +1041,6 @@ char_from_hex(int x)
 static int
 hex_from_char(char c) {
        int x;
-       assert(isxdigit(c));
        switch(c) {
        case '0':
                x = 0;
@@ -1271,12 +1270,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;
        }
@@ -1298,10 +1297,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);
        }