Mercurial > cpython-lru_cache-weakref
diff Modules/_sqlite/statement.c @ 49264:54613ba1dcad
Issue #3659: Values of string subclasses were not handled correctly when used
as bind parameters.
Reviewed by Bejnamin Peterson.
| author | Gerhard Häring <gh@ghaering.de> |
|---|---|
| date | Mon, 22 Sep 2008 06:04:51 +0000 |
| parents | 8f886acaa142 |
| children | 87fbbf22adf3 |
line wrap: on
line diff
--- a/Modules/_sqlite/statement.c Sun Sep 21 21:49:01 2008 +0000 +++ b/Modules/_sqlite/statement.c Mon Sep 22 06:04:51 2008 +0000 @@ -43,7 +43,6 @@ typedef enum { TYPE_LONG, TYPE_FLOAT, - TYPE_STRING, TYPE_UNICODE, TYPE_BUFFER, TYPE_UNKNOWN @@ -96,7 +95,6 @@ char* string; Py_ssize_t buflen; parameter_type paramtype; - char* c; if (parameter == Py_None) { rc = sqlite3_bind_null(self->st, pos); @@ -114,24 +112,13 @@ } else if (PyFloat_Check(parameter)) { paramtype = TYPE_FLOAT; } else if (PyUnicode_Check(parameter)) { - paramtype = TYPE_STRING; + paramtype = TYPE_UNICODE; } else if (PyObject_CheckBuffer(parameter)) { paramtype = TYPE_BUFFER; } else { paramtype = TYPE_UNKNOWN; } - if (paramtype == TYPE_STRING && !allow_8bit_chars) { - string = PyBytes_AS_STRING(parameter); - for (c = string; *c != 0; c++) { - if (*c & 0x80) { - PyErr_SetString(pysqlite_ProgrammingError, "You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings."); - rc = -1; - goto final; - } - } - } - switch (paramtype) { case TYPE_LONG: /* in the overflow error case, longval/longlongval is -1, and an exception is set */
