Commit 2204580c authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #28549: Fixed segfault in curses's addch() with ncurses6.

parent b95720a5
...@@ -113,6 +113,8 @@ Core and Builtins ...@@ -113,6 +113,8 @@ Core and Builtins
Library 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 - 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 file with compression before trying to open it without compression. Otherwise
it had 50% chance failed with ignore_zeros=True. it had 50% chance failed with ignore_zeros=True.
......
...@@ -280,7 +280,7 @@ static int ...@@ -280,7 +280,7 @@ static int
PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj, PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj,
chtype *ch chtype *ch
#ifdef HAVE_NCURSESW #ifdef HAVE_NCURSESW
, cchar_t *wch , wchar_t *wch
#endif #endif
) )
{ {
...@@ -298,8 +298,7 @@ PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj, ...@@ -298,8 +298,7 @@ PyCurses_ConvertToCchar_t(PyCursesWindowObject *win, PyObject *obj,
PyUnicode_GET_LENGTH(obj)); PyUnicode_GET_LENGTH(obj));
return 0; return 0;
} }
memset(wch->chars, 0, sizeof(wch->chars)); *wch = buffer[0];
wch->chars[0] = buffer[0];
return 2; return 2;
#else #else
return PyCurses_ConvertToChtype(win, obj, ch); return PyCurses_ConvertToChtype(win, obj, ch);
...@@ -597,7 +596,8 @@ curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y, ...@@ -597,7 +596,8 @@ curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y,
int type; int type;
chtype cch; chtype cch;
#ifdef HAVE_NCURSESW #ifdef HAVE_NCURSESW
cchar_t wch; wchar_t wstr[2];
cchar_t wcval;
#endif #endif
const char *funcname; const char *funcname;
...@@ -605,14 +605,15 @@ curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y, ...@@ -605,14 +605,15 @@ curses_window_addch_impl(PyCursesWindowObject *self, int group_left_1, int y,
attr = A_NORMAL; attr = A_NORMAL;
#ifdef HAVE_NCURSESW #ifdef HAVE_NCURSESW
type = PyCurses_ConvertToCchar_t(cwself, ch, &cch, &wch); type = PyCurses_ConvertToCchar_t(cwself, ch, &cch, wstr);
if (type == 2) { if (type == 2) {
funcname = "add_wch"; funcname = "add_wch";
wch.attr = attr; wstr[1] = L'\0';
setcchar(&wcval, wstr, attr, 0, NULL);
if (coordinates_group) if (coordinates_group)
rtn = mvwadd_wch(cwself->win,y,x, &wch); rtn = mvwadd_wch(cwself->win,y,x, &wcval);
else { else {
rtn = wadd_wch(cwself->win, &wch); rtn = wadd_wch(cwself->win, &wcval);
} }
} }
else else
......
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