#10811: Fix recursive usage of cursors. Instead of crashing, raise a ProgrammingError now.

This commit is contained in:
Gerhard Haering 2011-05-09 12:24:09 +02:00
parent 83b8c0be93
commit 936d518dc8
3 changed files with 43 additions and 10 deletions

View file

@ -281,6 +281,29 @@ class RegressionTests(unittest.TestCase):
# Lone surrogate cannot be encoded to the default encoding (utf8)
"\uDC80", collation_cb)
def CheckRecursiveCursorUse(self):
"""
http://bugs.python.org/issue10811
Recursively using a cursor, such as when reusing it from a generator led to segfaults.
Now we catch recursive cursor usage and raise a ProgrammingError.
"""
con = sqlite.connect(":memory:")
cur = con.cursor()
cur.execute("create table a (bar)")
cur.execute("create table b (baz)")
def foo():
cur.execute("insert into a (bar) values (?)", (1,))
yield 1
try:
cur.executemany("insert into b (baz) values (?)", ((i,) for i in foo()))
self.fail("should have raised ProgrammingError")
except sqlite.ProgrammingError:
pass
def suite():
regression_suite = unittest.makeSuite(RegressionTests, "Check")
return unittest.TestSuite((regression_suite,))