]> granicus.if.org Git - python/commitdiff
Merged revisions 75248 via svnmerge from
authorBenjamin Peterson <benjamin@python.org>
Sun, 4 Oct 2009 20:41:56 +0000 (20:41 +0000)
committerBenjamin Peterson <benjamin@python.org>
Sun, 4 Oct 2009 20:41:56 +0000 (20:41 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

................
  r75248 | benjamin.peterson | 2009-10-04 15:40:17 -0500 (Sun, 04 Oct 2009) | 11 lines

  Merged revisions 75066 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r75066 | andrew.kuchling | 2009-09-25 17:23:54 -0500 (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.
  ........
................

Lib/test/test_curses.py
Modules/_cursesmodule.c

index 4be2029fabdf1631b86736ce669d8a7b471719d6..2615ffb1cbd4372ccc9b61785c206ababe7607a9 100644 (file)
@@ -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()
 
index c7d377859d2d0e3990981e6c756f0435e5e92c9c..da19216bef1a31a9b2a8381b7941d6cee8bd67b3 100644 (file)
@@ -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 *