summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_curses.py5
-rw-r--r--Modules/_cursesmodule.c11
2 files changed, 12 insertions, 4 deletions
diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py
index 4be2029..2615ffb 100644
--- a/Lib/test/test_curses.py
+++ b/Lib/test/test_curses.py
@@ -259,6 +259,10 @@ def test_resize_term(stdscr):
if curses.LINES != lines - 1 or curses.COLS != cols + 1:
raise RuntimeError("Expected resizeterm to update LINES and COLS")
+def test_issue6243(stdscr):
+ curses.ungetch(1025)
+ stdscr.getkey()
+
def main(stdscr):
curses.savetty()
try:
@@ -266,6 +270,7 @@ def main(stdscr):
window_funcs(stdscr)
test_userptr_without_set(stdscr)
test_resize_term(stdscr)
+ test_issue6243(stdscr)
finally:
curses.resetty()
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index c7d3778..da19216 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -890,14 +890,17 @@ PyCursesWindow_GetKey(PyCursesWindowObject *self, PyObject *args)
/* getch() returns ERR in nodelay mode */
PyErr_SetString(PyCursesError, "no input");
return NULL;
- } else if (rtn<=255)
+ } else if (rtn<=255) {
return Py_BuildValue("C", rtn);
- else
+ } else {
+ const char *knp;
#if defined(__NetBSD__)
- return PyUnicode_FromString(unctrl(rtn));
+ knp = unctrl(rtn);
#else
- return PyUnicode_FromString((const char *)keyname(rtn));
+ knp = keyname(rtn);
#endif
+ return PyUnicode_FromString((knp == NULL) ? "" : knp);
+ }
}
static PyObject *