mirror of
https://github.com/python/cpython.git
synced 2025-07-16 07:45:20 +00:00
#10811: Fix recursive usage of cursors. Instead of crashing, raise a ProgrammingError now.
This commit is contained in:
parent
83b8c0be93
commit
936d518dc8
3 changed files with 43 additions and 10 deletions
|
@ -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,))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue