mirror of
https://github.com/python/cpython.git
synced 2025-10-03 13:45:29 +00:00
Issue #7670: sqlite3: Fixed crashes when operating on closed connections.
This commit is contained in:
parent
f580a5b924
commit
924b571104
3 changed files with 91 additions and 0 deletions
|
@ -763,6 +763,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")
|
||||||
|
|
|
@ -15,6 +15,10 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
Extension Modules
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
- Issue #7670: sqlite3: Fixed crashes when operating on closed connections.
|
||||||
|
|
||||||
What's New in Python 2.6.5 rc 1?
|
What's New in Python 2.6.5 rc 1?
|
||||||
================================
|
================================
|
||||||
|
|
|
@ -765,6 +765,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))
|
||||||
{
|
{
|
||||||
|
@ -794,6 +798,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;
|
||||||
|
@ -884,6 +892,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;
|
||||||
|
@ -909,6 +921,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;
|
||||||
|
@ -1020,6 +1036,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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue