diff options
author | Serhiy Storchaka <storchaka@gmail.com> | 2016-10-30 20:53:09 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2016-10-30 20:53:09 (GMT) |
commit | a0d9c685d0c3f817c5a7143098ce1a89380ee514 (patch) | |
tree | 8ceb1c36c633de8db089699a45cb190584f83636 /Modules | |
parent | 2f4453eff8296e6b5e57c237d47288d9a9842b00 (diff) | |
parent | 0bcd89b859dfbffd3cf8b2e7309998865deb9927 (diff) | |
download | cpython-a0d9c685d0c3f817c5a7143098ce1a89380ee514.zip cpython-a0d9c685d0c3f817c5a7143098ce1a89380ee514.tar.gz cpython-a0d9c685d0c3f817c5a7143098ce1a89380ee514.tar.bz2 |
Issue #28549: Fixed segfault in curses's addch() with ncurses6.
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_cursesmodule.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c index e63c16c..3bf2ca7 100644 --- a/Modules/_cursesmodule.c +++ b/Modules/_cursesmodule.c @@ -280,7 +280,7 @@ static int PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj, chtype *ch #ifdef HAVE_NCURSESW - , cchar_t *wch + , wchar_t *wch #endif ) { @@ -298,8 +298,7 @@ PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj, 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 @@ curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y, 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 @@ curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y, 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 |