diff options
author | Oren Milman <orenmn@gmail.com> | 2017-11-07 00:01:47 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2017-11-07 00:01:47 (GMT) |
commit | e56ab746a965277ffcc4396d8a0902b6e072d049 (patch) | |
tree | 96300bfc9afd03c0314da3d9ed9b100d0764a1e2 /Modules/_sqlite | |
parent | ad455cd9243319b896c86074ffeb3bf78a82f4ec (diff) | |
download | cpython-e56ab746a965277ffcc4396d8a0902b6e072d049.zip cpython-e56ab746a965277ffcc4396d8a0902b6e072d049.tar.gz cpython-e56ab746a965277ffcc4396d8a0902b6e072d049.tar.bz2 |
bpo-31770: Prevent a crash and refleaks when calling sqlite3.Cursor.__init__() more than once (#3968)
Diffstat (limited to 'Modules/_sqlite')
-rw-r--r-- | Modules/_sqlite/cursor.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/Modules/_sqlite/cursor.c b/Modules/_sqlite/cursor.c index cfe2627..f7a34c1 100644 --- a/Modules/_sqlite/cursor.c +++ b/Modules/_sqlite/cursor.c @@ -39,21 +39,20 @@ static int pysqlite_cursor_init(pysqlite_Cursor* self, PyObject* args, PyObject* } Py_INCREF(connection); - self->connection = connection; - self->statement = NULL; - self->next_row = NULL; - self->in_weakreflist = NULL; + Py_XSETREF(self->connection, connection); + Py_CLEAR(self->statement); + Py_CLEAR(self->next_row); - self->row_cast_map = PyList_New(0); + Py_XSETREF(self->row_cast_map, PyList_New(0)); if (!self->row_cast_map) { return -1; } Py_INCREF(Py_None); - self->description = Py_None; + Py_XSETREF(self->description, Py_None); Py_INCREF(Py_None); - self->lastrowid= Py_None; + Py_XSETREF(self->lastrowid, Py_None); self->arraysize = 1; self->closed = 0; @@ -62,7 +61,7 @@ static int pysqlite_cursor_init(pysqlite_Cursor* self, PyObject* args, PyObject* self->rowcount = -1L; Py_INCREF(Py_None); - self->row_factory = Py_None; + Py_XSETREF(self->row_factory, Py_None); if (!pysqlite_check_thread(self->connection)) { return -1; |