mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
Better error messages when raising ValueError for int and long
literals. (The previous version of this code would not show the offending input, even though there was code that attempted this.)
This commit is contained in:
parent
152d8173a3
commit
df3d8756b7
1 changed files with 9 additions and 6 deletions
|
@ -69,13 +69,12 @@ int_from_string(v)
|
|||
s++;
|
||||
errno = 0;
|
||||
x = PyOS_strtol(s, &end, 10);
|
||||
if (end == s || !isdigit(end[-1])) {
|
||||
PyErr_SetString(PyExc_ValueError, "no digits in int constant");
|
||||
return NULL;
|
||||
}
|
||||
if (end == s || !isdigit(end[-1]))
|
||||
goto bad;
|
||||
while (*end && isspace(Py_CHARMASK(*end)))
|
||||
end++;
|
||||
if (*end != '\0') {
|
||||
bad:
|
||||
sprintf(buffer, "invalid literal for int(): %.200s", s);
|
||||
PyErr_SetString(PyExc_ValueError, buffer);
|
||||
return NULL;
|
||||
|
@ -105,14 +104,18 @@ long_from_string(v)
|
|||
while (*s && isspace(Py_CHARMASK(*s)))
|
||||
s++;
|
||||
x = PyLong_FromString(s, &end, 10);
|
||||
if (x == NULL)
|
||||
if (x == NULL) {
|
||||
if (PyErr_ExceptionMatches(PyExc_ValueError))
|
||||
goto bad;
|
||||
return NULL;
|
||||
}
|
||||
while (*end && isspace(Py_CHARMASK(*end)))
|
||||
end++;
|
||||
if (*end != '\0') {
|
||||
bad:
|
||||
sprintf(buffer, "invalid literal for long(): %.200s", s);
|
||||
PyErr_SetString(PyExc_ValueError, buffer);
|
||||
Py_DECREF(x);
|
||||
Py_XDECREF(x);
|
||||
return NULL;
|
||||
}
|
||||
else if (end != PyString_AS_STRING(v) + PyString_GET_SIZE(v)) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue