]> granicus.if.org Git - python/commitdiff
Change the error reporting when an invalid string is encountered to avoid
authorGuido van Rossum <guido@python.org>
Wed, 22 Aug 2007 23:28:23 +0000 (23:28 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 22 Aug 2007 23:28:23 +0000 (23:28 +0000)
reporting s'x' as the input (which is a lie).

Objects/longobject.c

index 79d734e4f2b8920994271aa26f10e65acdcf7121..518e60763a3df2c7b5282fa7966fa7082ec02e78 100644 (file)
@@ -1689,7 +1689,7 @@ PyLong_FromString(char *str, char **pend, int base)
        int sign = 1, error_if_nonzero = 0;
        char *start, *orig_str = str;
        PyLongObject *z = NULL;
-       PyObject *strobj, *strrepr;
+       PyObject *strobj;
        Py_ssize_t slen;
 
        if ((base != 0 && base < 2) || base > 36) {
@@ -1956,17 +1956,13 @@ digit beyond the first.
  onError:
        Py_XDECREF(z);
        slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
-       strobj = PyString_FromStringAndSize(orig_str, slen);
+       strobj = PyUnicode_FromStringAndSize(orig_str, slen);
        if (strobj == NULL)
                return NULL;
-       strrepr = PyObject_ReprStr8(strobj);
-       Py_DECREF(strobj);
-       if (strrepr == NULL)
-               return NULL;
        PyErr_Format(PyExc_ValueError,
-                    "invalid literal for int() with base %d: %s",
-                    base, PyString_AS_STRING(strrepr));
-       Py_DECREF(strrepr);
+                    "invalid literal for int() with base %d: %R",
+                    base, strobj);
+       Py_DECREF(strobj);
        return NULL;
 }
 
@@ -3533,16 +3529,11 @@ long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
                        size = PyString_GET_SIZE(x);
                }
                if (strlen(string) != size) {
-                       /* create a repr() of the input string,
-                        * just like PyLong_FromString does. */
-                       PyObject *srepr;
-                       srepr = PyObject_ReprStr8(x);
-                       if (srepr == NULL)
-                               return NULL;
+                       /* We only see this if there's a null byte in x,
+                          x is a str8 or a bytes, *and* a base is given. */
                        PyErr_Format(PyExc_ValueError,
-                            "invalid literal for int() with base %d: %s",
-                            base, PyString_AS_STRING(srepr));
-                       Py_DECREF(srepr);
+                           "invalid literal for int() with base %d: %R",
+                           base, x);
                        return NULL;
                }
                return PyLong_FromString(string, NULL, base);