summaryrefslogtreecommitdiff
path: root/Lib/test/test_curses.py
diff options
context:
space:
mode:
authorAndrew Kuchling <amk@amk.ca>2013-06-22 14:50:56 -0400
committerAndrew Kuchling <amk@amk.ca>2013-06-22 14:50:56 -0400
commit4905e1200b1634d5d9ee2503f9a6e381e873df6b (patch)
tree2507c57e4c6cd946ef9b5a24a46ab229ca5e43a7 /Lib/test/test_curses.py
parent71b556615d88a19d584e172c78a5ca0434e4ad61 (diff)
downloadcpython-4905e1200b1634d5d9ee2503f9a6e381e873df6b.tar.gz
#18113: avoid segfault if Py_XDECREF triggers code that calls set_panel_userptr again
Problem noted & original patch by Serhiy Storchaka; I tweaked the patch a bit.
Diffstat (limited to 'Lib/test/test_curses.py')
-rw-r--r--Lib/test/test_curses.py9
1 files changed, 9 insertions, 0 deletions
diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py
index 76812b71ba..7310afc995 100644
--- a/Lib/test/test_curses.py
+++ b/Lib/test/test_curses.py
@@ -264,6 +264,14 @@ def test_userptr_memory_leak(stdscr):
if sys.getrefcount(obj) != nrefs:
raise RuntimeError("set_userptr leaked references")
+def test_userptr_segfault(stdscr):
+ panel = curses.panel.new_panel(stdscr)
+ class A:
+ def __del__(self):
+ panel.set_userptr(None)
+ panel.set_userptr(A())
+ panel.set_userptr(None)
+
def test_resize_term(stdscr):
if hasattr(curses, 'resizeterm'):
lines, cols = curses.LINES, curses.COLS
@@ -330,6 +338,7 @@ def main(stdscr):
window_funcs(stdscr)
test_userptr_without_set(stdscr)
test_userptr_memory_leak(stdscr)
+ test_userptr_segfault(stdscr)
test_resize_term(stdscr)
test_issue6243(stdscr)
test_unget_wch(stdscr)