diff options
author | Guido van Rossum <guido@python.org> | 1998-06-22 03:54:15 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1998-06-22 03:54:15 (GMT) |
commit | 3b2b34790ff86abcf87cfcfe061fd9fa8cb0ab32 (patch) | |
tree | fcf7e3d2c49b3eab598a0e888acbca162379df8c /Objects/abstract.c | |
parent | f57736e77a40aba1278d506e05655b03b0db8596 (diff) | |
download | cpython-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.c | 20 |
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; |