]> granicus.if.org Git - python/commitdiff
Issue #20026: Fix the sqlite module to handle correctly invalid isolation level
authorVictor Stinner <victor.stinner@gmail.com>
Thu, 19 Dec 2013 15:44:48 +0000 (16:44 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Thu, 19 Dec 2013 15:44:48 +0000 (16:44 +0100)
(wrong type).

Lib/sqlite3/test/regression.py
Misc/NEWS
Modules/_sqlite/connection.c

index 4c25f0005c83ece6302a7c61d32bd57046e9868a..5b7759c9963dfec9efa4f7076d7372b79357c1a8 100644 (file)
@@ -313,6 +313,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")
index 35da6abda6cbb92fa81cd891ccbc18d321b2de5a..9c9233c521f42298a2834abbe35902fb8da1370e 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -27,6 +27,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.
 
index d89b4c1f40b1a87b4acbc8af596920caf879d51f..59966dad5a0ddeb1bef402a1e1c813bd63c9a119 100644 (file)
@@ -152,7 +152,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);