changeset: 104835:d06bf822585c branch: 3.5 parent: 104831:f108e063e299 user: Serhiy Storchaka date: Sun Oct 30 22:52:06 2016 +0200 files: Misc/NEWS Modules/_cursesmodule.c description: Issue #28549: Fixed segfault in curses's addch() with ncurses6. diff -r f108e063e299 -r d06bf822585c Misc/NEWS --- a/Misc/NEWS Sun Oct 30 20:52:29 2016 +0200 +++ b/Misc/NEWS Sun Oct 30 22:52:06 2016 +0200 @@ -113,6 +113,8 @@ Library ------- +- Issue #28549: Fixed segfault in curses's addch() with ncurses6. + - Issue #28449: tarfile.open() with mode "r" or "r:" now tries to open a tar file with compression before trying to open it without compression. Otherwise it had 50% chance failed with ignore_zeros=True. diff -r f108e063e299 -r d06bf822585c Modules/_cursesmodule.c --- a/Modules/_cursesmodule.c Sun Oct 30 20:52:29 2016 +0200 +++ b/Modules/_cursesmodule.c Sun Oct 30 22:52:06 2016 +0200 @@ -280,7 +280,7 @@ PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj, chtype *ch #ifdef HAVE_NCURSESW - , cchar_t *wch + , wchar_t *wch #endif ) { @@ -298,8 +298,7 @@ PyUnicode_GET_LENGTH(obj)); return 0; } - memset(wch->chars, 0, sizeof(wch->chars)); - wch->chars[0] = buffer[0]; + *wch = buffer[0]; return 2; #else return PyCurses_ConvertToChtype(win, obj, ch); @@ -597,7 +596,8 @@ int type; chtype cch; #ifdef HAVE_NCURSESW - cchar_t wch; + wchar_t wstr[2]; + cchar_t wcval; #endif const char *funcname; @@ -605,14 +605,15 @@ attr = A_NORMAL; #ifdef HAVE_NCURSESW - type = PyCurses_ConvertToCchar_t(cwself, ch, &cch, &wch); + type = PyCurses_ConvertToCchar_t(cwself, ch, &cch, wstr); if (type == 2) { funcname = "add_wch"; - wch.attr = attr; + wstr[1] = L'\0'; + setcchar(&wcval, wstr, attr, 0, NULL); if (coordinates_group) - rtn = mvwadd_wch(cwself->win,y,x, &wch); + rtn = mvwadd_wch(cwself->win,y,x, &wcval); else { - rtn = wadd_wch(cwself->win, &wch); + rtn = wadd_wch(cwself->win, &wcval); } } else