apply a fix for #3611 where the current exception context was deleted with a generator causing a segfault
This commit is contained in:
parent
41e36676cd
commit
6e7740c790
@ -564,6 +564,28 @@ class ExceptionTests(unittest.TestCase):
|
|||||||
pass
|
pass
|
||||||
self.assertEquals(e, (None, None, None))
|
self.assertEquals(e, (None, None, None))
|
||||||
|
|
||||||
|
def test_3118(self):
|
||||||
|
def gen():
|
||||||
|
try:
|
||||||
|
yield 1
|
||||||
|
finally:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def f():
|
||||||
|
g = gen()
|
||||||
|
next(g)
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
raise ValueError
|
||||||
|
except:
|
||||||
|
del g
|
||||||
|
raise KeyError
|
||||||
|
except Exception as e:
|
||||||
|
self.assert_(isinstance(e.__context__, ValueError))
|
||||||
|
|
||||||
|
f()
|
||||||
|
|
||||||
|
|
||||||
def test_badisinstance(self):
|
def test_badisinstance(self):
|
||||||
# Bug #2542: if issubclass(e, MyException) raises an exception,
|
# Bug #2542: if issubclass(e, MyException) raises an exception,
|
||||||
# it should be ignored
|
# it should be ignored
|
||||||
|
@ -2453,7 +2453,7 @@ fast_block_end:
|
|||||||
|
|
||||||
if (b->b_type == EXCEPT_HANDLER) {
|
if (b->b_type == EXCEPT_HANDLER) {
|
||||||
UNWIND_EXCEPT_HANDLER(b);
|
UNWIND_EXCEPT_HANDLER(b);
|
||||||
if (why == WHY_EXCEPTION) {
|
if (why == WHY_EXCEPTION && !throwflag) {
|
||||||
Py_CLEAR(tstate->exc_type);
|
Py_CLEAR(tstate->exc_type);
|
||||||
Py_CLEAR(tstate->exc_value);
|
Py_CLEAR(tstate->exc_value);
|
||||||
Py_CLEAR(tstate->exc_traceback);
|
Py_CLEAR(tstate->exc_traceback);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user