mirror of
https://github.com/python/cpython.git
synced 2025-07-30 06:34:15 +00:00
#3312: fix two sqlite3 crashes.
This commit is contained in:
parent
4ed9be733b
commit
a24869ada7
4 changed files with 29 additions and 3 deletions
|
@ -153,6 +153,20 @@ class RegressionTests(unittest.TestCase):
|
||||||
con.execute("insert into foo(bar) values (5)")
|
con.execute("insert into foo(bar) values (5)")
|
||||||
con.execute(SELECT)
|
con.execute(SELECT)
|
||||||
|
|
||||||
|
def CheckRegisterAdapter(self):
|
||||||
|
"""
|
||||||
|
See issue 3312.
|
||||||
|
"""
|
||||||
|
self.assertRaises(TypeError, sqlite.register_adapter, {}, None)
|
||||||
|
|
||||||
|
def CheckSetIsolationLevel(self):
|
||||||
|
"""
|
||||||
|
See issue 3312.
|
||||||
|
"""
|
||||||
|
con = sqlite.connect(":memory:")
|
||||||
|
self.assertRaises(UnicodeEncodeError, setattr, con,
|
||||||
|
"isolation_level", u"\xe9")
|
||||||
|
|
||||||
|
|
||||||
def suite():
|
def suite():
|
||||||
regression_suite = unittest.makeSuite(RegressionTests, "Check")
|
regression_suite = unittest.makeSuite(RegressionTests, "Check")
|
||||||
|
|
|
@ -63,6 +63,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #3312: Fix two crashes in sqlite3.
|
||||||
|
|
||||||
- Issue #1608818: Fix misbehavior in os.listdir() if readdir() fails.
|
- Issue #1608818: Fix misbehavior in os.listdir() if readdir() fails.
|
||||||
|
|
||||||
- Issue #3125: Remove copy_reg in multiprocessing and replace it with
|
- Issue #3125: Remove copy_reg in multiprocessing and replace it with
|
||||||
|
|
|
@ -940,6 +940,7 @@ static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, Py
|
||||||
{
|
{
|
||||||
PyObject* res;
|
PyObject* res;
|
||||||
PyObject* begin_statement;
|
PyObject* begin_statement;
|
||||||
|
char* begin_statement_str;
|
||||||
|
|
||||||
Py_XDECREF(self->isolation_level);
|
Py_XDECREF(self->isolation_level);
|
||||||
|
|
||||||
|
@ -972,12 +973,18 @@ static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, Py
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
self->begin_statement = PyMem_Malloc(PyString_Size(begin_statement) + 2);
|
begin_statement_str = PyString_AsString(begin_statement);
|
||||||
|
if (!begin_statement_str) {
|
||||||
|
Py_DECREF(begin_statement);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
self->begin_statement = PyMem_Malloc(strlen(begin_statement_str) + 2);
|
||||||
if (!self->begin_statement) {
|
if (!self->begin_statement) {
|
||||||
|
Py_DECREF(begin_statement);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcpy(self->begin_statement, PyString_AsString(begin_statement));
|
strcpy(self->begin_statement, begin_statement_str);
|
||||||
Py_DECREF(begin_statement);
|
Py_DECREF(begin_statement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -147,6 +147,7 @@ static PyObject* module_register_adapter(PyObject* self, PyObject* args)
|
||||||
{
|
{
|
||||||
PyTypeObject* type;
|
PyTypeObject* type;
|
||||||
PyObject* caster;
|
PyObject* caster;
|
||||||
|
int rc;
|
||||||
|
|
||||||
if (!PyArg_ParseTuple(args, "OO", &type, &caster)) {
|
if (!PyArg_ParseTuple(args, "OO", &type, &caster)) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -159,7 +160,9 @@ static PyObject* module_register_adapter(PyObject* self, PyObject* args)
|
||||||
pysqlite_BaseTypeAdapted = 1;
|
pysqlite_BaseTypeAdapted = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
microprotocols_add(type, (PyObject*)&pysqlite_PrepareProtocolType, caster);
|
rc = microprotocols_add(type, (PyObject*)&pysqlite_PrepareProtocolType, caster);
|
||||||
|
if (rc == -1)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
Py_INCREF(Py_None);
|
Py_INCREF(Py_None);
|
||||||
return Py_None;
|
return Py_None;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue