Commit 47d960ec authored by Andrew M. Kuchling's avatar Andrew M. Kuchling

Merged revisions 75066 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r75066 | andrew.kuchling | 2009-09-25 18:23:54 -0400 (Fri, 25 Sep 2009) | 4 lines

  #6243: fix segfault when keyname() returns a NULL pointer.

  Bug noted by Trundle, patched by Trundle and Jerry Chen.
........
parent 63553d18
...@@ -261,6 +261,10 @@ def test_resize_term(stdscr): ...@@ -261,6 +261,10 @@ def test_resize_term(stdscr):
if curses.LINES != lines - 1 or curses.COLS != cols + 1: if curses.LINES != lines - 1 or curses.COLS != cols + 1:
raise RuntimeError, "Expected resizeterm to update LINES and COLS" raise RuntimeError, "Expected resizeterm to update LINES and COLS"
def test_issue6243(stdscr):
curses.ungetch(1025)
stdscr.getkey()
def main(stdscr): def main(stdscr):
curses.savetty() curses.savetty()
try: try:
...@@ -268,6 +272,7 @@ def main(stdscr): ...@@ -268,6 +272,7 @@ def main(stdscr):
window_funcs(stdscr) window_funcs(stdscr)
test_userptr_without_set(stdscr) test_userptr_without_set(stdscr)
test_resize_term(stdscr) test_resize_term(stdscr)
test_issue6243(stdscr)
finally: finally:
curses.resetty() curses.resetty()
......
...@@ -66,6 +66,9 @@ Core and Builtins ...@@ -66,6 +66,9 @@ Core and Builtins
Library Library
------- -------
- Issue #6243: curses.getkey() can segfault when used with ungetch.
Fix by Trundle and Jerry Chen.
- Issue #7597: curses.use_env() can now be called before initscr(). - Issue #7597: curses.use_env() can now be called before initscr().
Noted by Kan-Ru Chen. Noted by Kan-Ru Chen.
......
...@@ -882,14 +882,17 @@ PyCursesWindow_GetKey(PyCursesWindowObject *self, PyObject *args) ...@@ -882,14 +882,17 @@ PyCursesWindow_GetKey(PyCursesWindowObject *self, PyObject *args)
/* getch() returns ERR in nodelay mode */ /* getch() returns ERR in nodelay mode */
PyErr_SetString(PyCursesError, "no input"); PyErr_SetString(PyCursesError, "no input");
return NULL; return NULL;
} else if (rtn<=255) } else if (rtn<=255) {
return Py_BuildValue("c", rtn); return Py_BuildValue("c", rtn);
else } else {
const char *knp;
#if defined(__NetBSD__) #if defined(__NetBSD__)
return PyString_FromString(unctrl(rtn)); knp = unctrl(rtn);
#else #else
return PyString_FromString((char *)keyname(rtn)); knp = keyname(rtn);
#endif #endif
return PyString_FromString((knp == NULL) ? "" : knp);
}
} }
static PyObject * static PyObject *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment