summaryrefslogtreecommitdiffstats
path: root/Objects/abstract.c
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1998-06-22 03:54:15 (GMT)
committerGuido van Rossum <guido@python.org>1998-06-22 03:54:15 (GMT)
commit3b2b34790ff86abcf87cfcfe061fd9fa8cb0ab32 (patch)
treefcf7e3d2c49b3eab598a0e888acbca162379df8c /Objects/abstract.c
parentf57736e77a40aba1278d506e05655b03b0db8596 (diff)
downloadcpython-3b2b34790ff86abcf87cfcfe061fd9fa8cb0ab32.zip
cpython-3b2b34790ff86abcf87cfcfe061fd9fa8cb0ab32.tar.gz
cpython-3b2b34790ff86abcf87cfcfe061fd9fa8cb0ab32.tar.bz2
Fix the tests for various anomalies in the string-to-numbers
conversions. Formerly, for example, int('-') would return 0 instead of raising ValueError, and int(' 0') would raise ValueError (complaining about a null byte!) instead of 0...
Diffstat (limited to 'Objects/abstract.c')
-rw-r--r--Objects/abstract.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/Objects/abstract.c b/Objects/abstract.c
index 30f993b..086987e 100644
--- a/Objects/abstract.c
+++ b/Objects/abstract.c
@@ -67,12 +67,12 @@ int_from_string(v)
s = PyString_AS_STRING(v);
while (*s && isspace(Py_CHARMASK(*s)))
s++;
- if (s[0] == '\0') {
- PyErr_SetString(PyExc_ValueError, "empty string for int()");
- return NULL;
- }
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;
+ }
while (*end && isspace(Py_CHARMASK(*end)))
end++;
if (*end != '\0') {
@@ -80,7 +80,7 @@ int_from_string(v)
PyErr_SetString(PyExc_ValueError, buffer);
return NULL;
}
- else if (end-s != PyString_GET_SIZE(v)) {
+ else if (end != PyString_AS_STRING(v) + PyString_GET_SIZE(v)) {
PyErr_SetString(PyExc_ValueError,
"null byte in argument for int()");
return NULL;
@@ -104,10 +104,6 @@ long_from_string(v)
s = PyString_AS_STRING(v);
while (*s && isspace(Py_CHARMASK(*s)))
s++;
- if (s[0] == '\0') {
- PyErr_SetString(PyExc_ValueError, "empty string for long()");
- return NULL;
- }
x = PyLong_FromString(s, &end, 10);
if (x == NULL)
return NULL;
@@ -119,9 +115,9 @@ long_from_string(v)
Py_DECREF(x);
return NULL;
}
- else if (end-s != PyString_GET_SIZE(v)) {
+ else if (end != PyString_AS_STRING(v) + PyString_GET_SIZE(v)) {
PyErr_SetString(PyExc_ValueError,
- "null byte in argument for float()");
+ "null byte in argument for long()");
return NULL;
}
return x;
@@ -154,7 +150,7 @@ float_from_string(v)
PyErr_SetString(PyExc_ValueError, buffer);
return NULL;
}
- else if (end-s != PyString_GET_SIZE(v)) {
+ else if (end != PyString_AS_STRING(v) + PyString_GET_SIZE(v)) {
PyErr_SetString(PyExc_ValueError,
"null byte in argument for float()");
return NULL;