bpo-27666: Fixed stack corruption in curses.box() and curses.ungetmou… · python/cpython@aad7ac1 (original) (raw)
`@@ -912,12 +912,19 @@ PyCursesWindow_Border(PyCursesWindowObject *self, PyObject *args)
`
912
912
`static PyObject *
`
913
913
`PyCursesWindow_Box(PyCursesWindowObject *self, PyObject *args)
`
914
914
`{
`
``
915
`+
PyObject *temp1, *temp2;
`
915
916
`chtype ch1=0,ch2=0;
`
916
917
`switch(PyTuple_Size(args)){
`
917
918
`case 0: break;
`
918
919
`default:
`
919
``
`-
if (!PyArg_ParseTuple(args,"ll;vertint,horint", &ch1, &ch2))
`
``
920
`+
if (!PyArg_ParseTuple(args,"OO;verch,horch", &temp1, &temp2))
`
920
921
`return NULL;
`
``
922
`+
if (!PyCurses_ConvertToChtype(self, temp1, &ch1)) {
`
``
923
`+
return NULL;
`
``
924
`+
}
`
``
925
`+
if (!PyCurses_ConvertToChtype(self, temp2, &ch2)) {
`
``
926
`+
return NULL;
`
``
927
`+
}
`
921
928
` }
`
922
929
`box(self->win,ch1,ch2);
`
923
930
`Py_INCREF(Py_None);
`
`@@ -2285,24 +2292,30 @@ PyCurses_GetMouse(PyObject *self)
`
2285
2292
`PyErr_SetString(PyCursesError, "getmouse() returned ERR");
`
2286
2293
`return NULL;
`
2287
2294
` }
`
2288
``
`-
return Py_BuildValue("(hiiil)",
`
``
2295
`+
return Py_BuildValue("(hiiik)",
`
2289
2296
` (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);
`
2292
2299
`}
`
2293
2300
``
2294
2301
`static PyObject *
`
2295
2302
`PyCurses_UngetMouse(PyObject *self, PyObject *args)
`
2296
2303
`{
`
2297
2304
`MEVENT event;
`
``
2305
`+
short id;
`
``
2306
`+
int x, y, z;
`
``
2307
`+
unsigned long bstate;
`
2298
2308
``
2299
2309
`PyCursesInitialised;
`
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))
`
2304
2312
`return NULL;
`
2305
2313
``
``
2314
`+
event.id = id;
`
``
2315
`+
event.x = x;
`
``
2316
`+
event.y = y;
`
``
2317
`+
event.z = z;
`
``
2318
`+
event.bstate = bstate;
`
2306
2319
`return PyCursesCheckERR(ungetmouse(&event), "ungetmouse");
`
2307
2320
`}
`
2308
2321
`#endif
`
`@@ -2701,14 +2714,15 @@ PyCurses_MouseInterval(PyObject *self, PyObject *args)
`
2701
2714
`static PyObject *
`
2702
2715
`PyCurses_MouseMask(PyObject *self, PyObject *args)
`
2703
2716
`{
`
2704
``
`-
int newmask;
`
``
2717
`+
unsigned long newmask;
`
2705
2718
`mmask_t oldmask, availmask;
`
2706
2719
``
2707
2720
`PyCursesInitialised;
`
2708
``
`-
if (!PyArg_ParseTuple(args,"i;mousemask",&newmask))
`
``
2721
`+
if (!PyArg_ParseTuple(args,"k;mousemask",&newmask))
`
2709
2722
`return 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);
`
2712
2726
`}
`
2713
2727
`#endif
`
2714
2728
``