]> granicus.if.org Git - python/commitdiff
Use a faster way to check for null bytes in the string argument for
authorGuido van Rossum <guido@python.org>
Fri, 13 Mar 1998 21:30:14 +0000 (21:30 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 13 Mar 1998 21:30:14 +0000 (21:30 +0000)
int(), long(), float().

Python/bltinmodule.c

index 3460f1a6be925481dc6b16b7eea13707970b4992..87005f5ba229bc88dd4a98bd1494f32343b8c017 100644 (file)
@@ -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);