bpo-27666: Fixed stack corruption in curses.box() and curses.ungetmou… · python/cpython@aad7ac1
@@ -912,12 +912,19 @@ PyCursesWindow_Border(PyCursesWindowObject *self, PyObject *args)
912912static PyObject *
913913PyCursesWindow_Box(PyCursesWindowObject *self, PyObject *args)
914914{
915+PyObject *temp1, *temp2;
915916chtype ch1=0,ch2=0;
916917switch(PyTuple_Size(args)){
917918case 0: break;
918919default:
919-if (!PyArg_ParseTuple(args,"ll;vertint,horint", &ch1, &ch2))
920+if (!PyArg_ParseTuple(args,"OO;verch,horch", &temp1, &temp2))
920921return NULL;
922+if (!PyCurses_ConvertToChtype(self, temp1, &ch1)) {
923+return NULL;
924+ }
925+if (!PyCurses_ConvertToChtype(self, temp2, &ch2)) {
926+return NULL;
927+ }
921928 }
922929box(self->win,ch1,ch2);
923930Py_INCREF(Py_None);
@@ -2285,24 +2292,30 @@ PyCurses_GetMouse(PyObject *self)
22852292PyErr_SetString(PyCursesError, "getmouse() returned ERR");
22862293return NULL;
22872294 }
2288-return Py_BuildValue("(hiiil)",
2295+return Py_BuildValue("(hiiik)",
22892296 (short)event.id,
2290-event.x, event.y, event.z,
2291- (long) event.bstate);
2297+(int)event.x, (int)event.y, (int)event.z,
2298+ (unsigned long) event.bstate);
22922299}
2293230022942301static PyObject *
22952302PyCurses_UngetMouse(PyObject *self, PyObject *args)
22962303{
22972304MEVENT event;
2305+short id;
2306+int x, y, z;
2307+unsigned long bstate;
2298230822992309PyCursesInitialised;
2300-if (!PyArg_ParseTuple(args, "hiiil",
2301-&event.id,
2302-&event.x, &event.y, &event.z,
2303- (int *) &event.bstate))
2310+if (!PyArg_ParseTuple(args, "hiiik",
2311+&id, &x, &y, &z, &bstate))
23042312return NULL;
230523132314+event.id = id;
2315+event.x = x;
2316+event.y = y;
2317+event.z = z;
2318+event.bstate = bstate;
23062319return PyCursesCheckERR(ungetmouse(&event), "ungetmouse");
23072320}
23082321#endif
@@ -2701,14 +2714,15 @@ PyCurses_MouseInterval(PyObject *self, PyObject *args)
27012714static PyObject *
27022715PyCurses_MouseMask(PyObject *self, PyObject *args)
27032716{
2704-int newmask;
2717+unsigned long newmask;
27052718mmask_t oldmask, availmask;
2706271927072720PyCursesInitialised;
2708-if (!PyArg_ParseTuple(args,"i;mousemask",&newmask))
2721+if (!PyArg_ParseTuple(args,"k;mousemask",&newmask))
27092722return NULL;
2710-availmask = mousemask(newmask, &oldmask);
2711-return Py_BuildValue("(ll)", (long)availmask, (long)oldmask);
2723+availmask = mousemask((mmask_t)newmask, &oldmask);
2724+return Py_BuildValue("(kk)",
2725+ (unsigned long)availmask, (unsigned long)oldmask);
27122726}
27132727#endif
27142728