[Python-checkins] cpython (merge 3.3 -> default): Merge from 3.3
andrew.kuchling
python-checkins at python.org
Sat Jun 22 20:57:55 CEST 2013
http://hg.python.org/cpython/rev/d7d73f48dfda
changeset: 84257:d7d73f48dfda
parent: 84254:7fb25b77e327
parent: 84256:61fafef4c8a2
user: Andrew Kuchling <amk at amk.ca>
date: Sat Jun 22 14:57:45 2013 -0400
summary:
Merge from 3.3
files:
Lib/test/test_curses.py | 9 +++++++++
Modules/_curses_panel.c | 11 ++++++++---
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py
--- a/Lib/test/test_curses.py
+++ b/Lib/test/test_curses.py
@@ -264,6 +264,14 @@
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 @@
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)
diff --git a/Modules/_curses_panel.c b/Modules/_curses_panel.c
--- a/Modules/_curses_panel.c
+++ b/Modules/_curses_panel.c
@@ -323,12 +323,17 @@
PyCursesPanel_set_panel_userptr(PyCursesPanelObject *self, PyObject *obj)
{
PyObject *oldobj;
+ int rc;
PyCursesInitialised;
+ Py_INCREF(obj);
oldobj = (PyObject *) panel_userptr(self->pan);
+ rc = set_panel_userptr(self->pan, (void*)obj);
+ if (rc == ERR) {
+ /* In case of an ncurses error, decref the new object again */
+ Py_DECREF(obj);
+ }
Py_XDECREF(oldobj);
- Py_INCREF(obj);
- return PyCursesCheckERR(set_panel_userptr(self->pan, (void*)obj),
- "set_panel_userptr");
+ return PyCursesCheckERR(rc, "set_panel_userptr");
}
static PyObject *
--
Repository URL: http://hg.python.org/cpython
More information about the Python-checkins
mailing list