diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2021-06-04 18:54:39 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-04 18:54:39 (GMT) |
commit | 067d6d46575b5cf30bbf7c812defee1517106a34 (patch) | |
tree | 2497963d4b2a7ecfa831f8bd9c52465ee9aa3c67 /Modules/_sqlite | |
parent | 3f4d801bf907a5fcab50f3b64475d1410b90a80f (diff) | |
download | cpython-067d6d46575b5cf30bbf7c812defee1517106a34.zip cpython-067d6d46575b5cf30bbf7c812defee1517106a34.tar.gz cpython-067d6d46575b5cf30bbf7c812defee1517106a34.tar.bz2 |
bpo-43853: Handle sqlite3_value_text() errors (GH-25422)
(cherry picked from commit 006fd869e4798b68e266f5de89c83ddb531a756b)
Co-authored-by: Erlend Egeberg Aasland <erlend.aasland@innova.no>
Diffstat (limited to 'Modules/_sqlite')
-rw-r--r-- | Modules/_sqlite/connection.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index e124b17..fccffab 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -576,7 +576,6 @@ _pysqlite_build_py_params(sqlite3_context *context, int argc, int i; sqlite3_value* cur_value; PyObject* cur_py_value; - const char* val_str; args = PyTuple_New(argc); if (!args) { @@ -592,15 +591,19 @@ _pysqlite_build_py_params(sqlite3_context *context, int argc, case SQLITE_FLOAT: cur_py_value = PyFloat_FromDouble(sqlite3_value_double(cur_value)); break; - case SQLITE_TEXT: - val_str = (const char*)sqlite3_value_text(cur_value); - cur_py_value = PyUnicode_FromString(val_str); - /* TODO: have a way to show errors here */ - if (!cur_py_value) { - PyErr_Clear(); - cur_py_value = Py_NewRef(Py_None); + case SQLITE_TEXT: { + sqlite3 *db = sqlite3_context_db_handle(context); + const char *text = (const char *)sqlite3_value_text(cur_value); + + if (text == NULL && sqlite3_errcode(db) == SQLITE_NOMEM) { + PyErr_NoMemory(); + goto error; } + + Py_ssize_t size = sqlite3_value_bytes(cur_value); + cur_py_value = PyUnicode_FromStringAndSize(text, size); break; + } case SQLITE_BLOB: { sqlite3 *db = sqlite3_context_db_handle(context); const void *blob = sqlite3_value_blob(cur_value); |