From 8ab114c3f506baa8975e1768a20c80cf29c1d1c0 Mon Sep 17 00:00:00 2001 From: Roger Binns Date: Sun, 16 Jun 2024 12:26:13 -0700 Subject: [PATCH] Pathological error handling --- src/vfs.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/vfs.c b/src/vfs.c index 40c4c3c7..15c882c1 100644 --- a/src/vfs.c +++ b/src/vfs.c @@ -2796,12 +2796,21 @@ apswvfsfile_xFileControl(sqlite3_file *file, int op, void *pArg) #if PY_VERSION_HEX >= 0x030b0000 qualname = PyType_GetQualName(Py_TYPE(apswfile->file)); if (qualname && PyUnicode_Check(qualname)) - name = PyUnicode_AsUTF8(qualname); + { + const char *tmp_name = PyUnicode_AsUTF8(qualname); + if (tmp_name) + name = tmp_name; + } #endif + PyErr_Clear(); + PyObject *module = PyObject_GetAttrString((PyObject *)Py_TYPE(apswfile->file), "__module__"); if (module && PyUnicode_Check(module)) + { modname = PyUnicode_AsUTF8(module); + PyErr_Clear(); + } /* the above calls could have exceptions but they aren't useful, so ignore */ @@ -2818,10 +2827,13 @@ apswvfsfile_xFileControl(sqlite3_file *file, int op, void *pArg) Py_XDECREF(module); Py_XDECREF(qualname); - if (*(char **)pArg) - sqlite3_free(*(char **)pArg); + if (new_val) + { + if (*(char **)pArg) + sqlite3_free(*(char **)pArg); - *(char **)pArg = new_val; + *(char **)pArg = new_val; + } result = SQLITE_OK; goto end; }