summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1998-03-13 21:30:14 (GMT)
committerGuido van Rossum <guido@python.org>1998-03-13 21:30:14 (GMT)
commit8f74571596e23a1742d393532968cd727771c535 (patch)
tree87f3157e1cf9174750abe85b9192ca087b77d480
parent677fc843ea458642dfea59d7fc8644356d096c00 (diff)
downloadcpython-8f74571596e23a1742d393532968cd727771c535.zip
cpython-8f74571596e23a1742d393532968cd727771c535.tar.gz
cpython-8f74571596e23a1742d393532968cd727771c535.tar.bz2
Use a faster way to check for null bytes in the string argument for
int(), long(), float().
-rw-r--r--Python/bltinmodule.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 3460f1a..87005f5 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -2095,8 +2095,7 @@ int_from_string(v)
long x;
char buffer[256]; /* For errors */
- if (!PyArg_Parse(v, "s", &s))
- return NULL;
+ s = PyString_AS_STRING(v);
while (*s && isspace(Py_CHARMASK(*s)))
s++;
if (s[0] == '\0') {
@@ -2112,6 +2111,11 @@ int_from_string(v)
PyErr_SetString(PyExc_ValueError, buffer);
return NULL;
}
+ else if (end-s != PyString_GET_SIZE(v)) {
+ PyErr_SetString(PyExc_ValueError,
+ "null byte in argument for int()");
+ return NULL;
+ }
else if (errno != 0) {
sprintf(buffer, "int() literal too large: %.200s", s);
PyErr_SetString(PyExc_ValueError, buffer);
@@ -2128,9 +2132,7 @@ long_from_string(v)
PyObject *x;
char buffer[256]; /* For errors */
- if (!PyArg_Parse(v, "s", &s))
- return NULL;
-
+ s = PyString_AS_STRING(v);
while (*s && isspace(Py_CHARMASK(*s)))
s++;
if (s[0] == '\0') {
@@ -2148,6 +2150,11 @@ long_from_string(v)
Py_DECREF(x);
return NULL;
}
+ else if (end-s != PyString_GET_SIZE(v)) {
+ PyErr_SetString(PyExc_ValueError,
+ "null byte in argument for float()");
+ return NULL;
+ }
return x;
}
@@ -2160,8 +2167,7 @@ float_from_string(v)
double x;
char buffer[256]; /* For errors */
- if (!PyArg_Parse(v, "s", &s))
- return NULL;
+ s = PyString_AS_STRING(v);
while (*s && isspace(Py_CHARMASK(*s)))
s++;
if (s[0] == '\0') {
@@ -2179,6 +2185,11 @@ float_from_string(v)
PyErr_SetString(PyExc_ValueError, buffer);
return NULL;
}
+ else if (end-s != PyString_GET_SIZE(v)) {
+ PyErr_SetString(PyExc_ValueError,
+ "null byte in argument for float()");
+ return NULL;
+ }
else if (errno != 0) {
sprintf(buffer, "float() literal too large: %.200s", s);
PyErr_SetString(PyExc_ValueError, buffer);