summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2013-12-19 15:39:00 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2013-12-19 15:39:00 (GMT)
commit08263f10f8b9374cccf47591c3ccc64fb888d269 (patch)
tree282f80787b548ed341b77dfe1fb4c536dfe036fb
parentcf58fb5e2947ebe6ac1e06b7f8fbe9a417b7430f (diff)
parentcb1f74ec405b81dd1319b616829dd576a48603f8 (diff)
downloadcpython-08263f10f8b9374cccf47591c3ccc64fb888d269.zip
cpython-08263f10f8b9374cccf47591c3ccc64fb888d269.tar.gz
cpython-08263f10f8b9374cccf47591c3ccc64fb888d269.tar.bz2
(Merge 3.3) Issue #20026: Fix the sqlite module to handle correctly invalid
isolation level (wrong type).
-rw-r--r--Lib/sqlite3/test/regression.py5
-rw-r--r--Misc/NEWS3
-rw-r--r--Modules/_sqlite/connection.c5
3 files changed, 12 insertions, 1 deletions
diff --git a/Lib/sqlite3/test/regression.py b/Lib/sqlite3/test/regression.py
index b927cb3..c557ab6 100644
--- a/Lib/sqlite3/test/regression.py
+++ b/Lib/sqlite3/test/regression.py
@@ -330,6 +330,11 @@ class RegressionTests(unittest.TestCase):
datetime.datetime(2012, 4, 4, 15, 6, 0, 123456),
])
+ def CheckInvalidIsolationLevelType(self):
+ # isolation level is a string, not an integer
+ self.assertRaises(TypeError,
+ sqlite.connect, ":memory:", isolation_level=123)
+
def suite():
regression_suite = unittest.makeSuite(RegressionTests, "Check")
diff --git a/Misc/NEWS b/Misc/NEWS
index ad41540..1455866 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -44,6 +44,9 @@ Core and Builtins
Library
-------
+- Issue #20026: Fix the sqlite module to handle correctly invalid isolation
+ level (wrong type).
+
- Issue #18829: csv.Dialect() now checks type for delimiter, escapechar and
quotechar fields. Original patch by Vajrasky Kok.
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
index 50c6f0a..882424b 100644
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -128,7 +128,10 @@ int pysqlite_connection_init(pysqlite_Connection* self, PyObject* args, PyObject
Py_INCREF(isolation_level);
}
self->isolation_level = NULL;
- pysqlite_connection_set_isolation_level(self, isolation_level);
+ if (pysqlite_connection_set_isolation_level(self, isolation_level) < 0) {
+ Py_DECREF(isolation_level);
+ return -1;
+ }
Py_DECREF(isolation_level);
self->statement_cache = (pysqlite_Cache*)PyObject_CallFunction((PyObject*)&pysqlite_CacheType, "Oi", self, cached_statements);