Kaydet (Commit) 78576508 authored tarafından Gerhard Häring's avatar Gerhard Häring

Issue #7670: sqlite3: Fixed crashes when operating on closed connections.

üst 94820327
...@@ -744,6 +744,73 @@ class ClosedTests(unittest.TestCase): ...@@ -744,6 +744,73 @@ class ClosedTests(unittest.TestCase):
except: except:
self.fail("Should have raised a ProgrammingError") self.fail("Should have raised a ProgrammingError")
def CheckClosedCreateFunction(self):
con = sqlite.connect(":memory:")
con.close()
def f(x): return 17
try:
con.create_function("foo", 1, f)
self.fail("Should have raised a ProgrammingError")
except sqlite.ProgrammingError:
pass
except:
self.fail("Should have raised a ProgrammingError")
def CheckClosedCreateAggregate(self):
con = sqlite.connect(":memory:")
con.close()
class Agg:
def __init__(self):
pass
def step(self, x):
pass
def finalize(self):
return 17
try:
con.create_aggregate("foo", 1, Agg)
self.fail("Should have raised a ProgrammingError")
except sqlite.ProgrammingError:
pass
except:
self.fail("Should have raised a ProgrammingError")
def CheckClosedSetAuthorizer(self):
con = sqlite.connect(":memory:")
con.close()
def authorizer(*args):
return sqlite.DENY
try:
con.set_authorizer(authorizer)
self.fail("Should have raised a ProgrammingError")
except sqlite.ProgrammingError:
pass
except:
self.fail("Should have raised a ProgrammingError")
def CheckClosedSetProgressCallback(self):
con = sqlite.connect(":memory:")
con.close()
def progress(): pass
try:
con.set_progress_handler(progress, 100)
self.fail("Should have raised a ProgrammingError")
except sqlite.ProgrammingError:
pass
except:
self.fail("Should have raised a ProgrammingError")
def CheckClosedCall(self):
con = sqlite.connect(":memory:")
con.close()
try:
con()
self.fail("Should have raised a ProgrammingError")
except sqlite.ProgrammingError:
pass
except:
self.fail("Should have raised a ProgrammingError")
def suite(): def suite():
module_suite = unittest.makeSuite(ModuleTests, "Check") module_suite = unittest.makeSuite(ModuleTests, "Check")
connection_suite = unittest.makeSuite(ConnectionTests, "Check") connection_suite = unittest.makeSuite(ConnectionTests, "Check")
......
...@@ -356,6 +356,8 @@ Library ...@@ -356,6 +356,8 @@ Library
Extension Modules Extension Modules
----------------- -----------------
- Issue #7670: sqlite3: Fixed crashes when operating on closed connections.
- Stop providing crtassem.h symbols when compiling with Visual Studio 2010, as - Stop providing crtassem.h symbols when compiling with Visual Studio 2010, as
msvcr100.dll is not a platform assembly anymore. msvcr100.dll is not a platform assembly anymore.
......
...@@ -690,6 +690,10 @@ PyObject* pysqlite_connection_create_function(pysqlite_Connection* self, PyObjec ...@@ -690,6 +690,10 @@ PyObject* pysqlite_connection_create_function(pysqlite_Connection* self, PyObjec
int narg; int narg;
int rc; int rc;
if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
return NULL;
}
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO", kwlist, if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO", kwlist,
&name, &narg, &func)) &name, &narg, &func))
{ {
...@@ -719,6 +723,10 @@ PyObject* pysqlite_connection_create_aggregate(pysqlite_Connection* self, PyObje ...@@ -719,6 +723,10 @@ PyObject* pysqlite_connection_create_aggregate(pysqlite_Connection* self, PyObje
static char *kwlist[] = { "name", "n_arg", "aggregate_class", NULL }; static char *kwlist[] = { "name", "n_arg", "aggregate_class", NULL };
int rc; int rc;
if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
return NULL;
}
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO:create_aggregate", if (!PyArg_ParseTupleAndKeywords(args, kwargs, "siO:create_aggregate",
kwlist, &name, &n_arg, &aggregate_class)) { kwlist, &name, &n_arg, &aggregate_class)) {
return NULL; return NULL;
...@@ -809,6 +817,10 @@ PyObject* pysqlite_connection_set_authorizer(pysqlite_Connection* self, PyObject ...@@ -809,6 +817,10 @@ PyObject* pysqlite_connection_set_authorizer(pysqlite_Connection* self, PyObject
static char *kwlist[] = { "authorizer_callback", NULL }; static char *kwlist[] = { "authorizer_callback", NULL };
int rc; int rc;
if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
return NULL;
}
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:set_authorizer", if (!PyArg_ParseTupleAndKeywords(args, kwargs, "O:set_authorizer",
kwlist, &authorizer_cb)) { kwlist, &authorizer_cb)) {
return NULL; return NULL;
...@@ -834,6 +846,10 @@ PyObject* pysqlite_connection_set_progress_handler(pysqlite_Connection* self, Py ...@@ -834,6 +846,10 @@ PyObject* pysqlite_connection_set_progress_handler(pysqlite_Connection* self, Py
static char *kwlist[] = { "progress_handler", "n", NULL }; static char *kwlist[] = { "progress_handler", "n", NULL };
if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
return NULL;
}
if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi:set_progress_handler", if (!PyArg_ParseTupleAndKeywords(args, kwargs, "Oi:set_progress_handler",
kwlist, &progress_handler, &n)) { kwlist, &progress_handler, &n)) {
return NULL; return NULL;
...@@ -948,6 +964,10 @@ PyObject* pysqlite_connection_call(pysqlite_Connection* self, PyObject* args, Py ...@@ -948,6 +964,10 @@ PyObject* pysqlite_connection_call(pysqlite_Connection* self, PyObject* args, Py
PyObject* weakref; PyObject* weakref;
int rc; int rc;
if (!pysqlite_check_thread(self) || !pysqlite_check_connection(self)) {
return NULL;
}
if (!PyArg_ParseTuple(args, "O", &sql)) { if (!PyArg_ParseTuple(args, "O", &sql)) {
return NULL; return NULL;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment