bpo-27666: Fixed stack corruption in curses.box() and curses.ungetmou… · python/cpython@aad7ac1

@@ -912,12 +912,19 @@ PyCursesWindow_Border(PyCursesWindowObject *self, PyObject *args)

912912

static PyObject *

913913

PyCursesWindow_Box(PyCursesWindowObject *self, PyObject *args)

914914

{

915+

PyObject *temp1, *temp2;

915916

chtype ch1=0,ch2=0;

916917

switch(PyTuple_Size(args)){

917918

case 0: break;

918919

default:

919-

if (!PyArg_ParseTuple(args,"ll;vertint,horint", &ch1, &ch2))

920+

if (!PyArg_ParseTuple(args,"OO;verch,horch", &temp1, &temp2))

920921

return NULL;

922+

if (!PyCurses_ConvertToChtype(self, temp1, &ch1)) {

923+

return NULL;

924+

}

925+

if (!PyCurses_ConvertToChtype(self, temp2, &ch2)) {

926+

return NULL;

927+

}

921928

}

922929

box(self->win,ch1,ch2);

923930

Py_INCREF(Py_None);

@@ -2285,24 +2292,30 @@ PyCurses_GetMouse(PyObject *self)

22852292

PyErr_SetString(PyCursesError, "getmouse() returned ERR");

22862293

return 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

}

2293230022942301

static PyObject *

22952302

PyCurses_UngetMouse(PyObject *self, PyObject *args)

22962303

{

22972304

MEVENT event;

2305+

short id;

2306+

int x, y, z;

2307+

unsigned long bstate;

2298230822992309

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))

23042312

return NULL;

230523132314+

event.id = id;

2315+

event.x = x;

2316+

event.y = y;

2317+

event.z = z;

2318+

event.bstate = bstate;

23062319

return PyCursesCheckERR(ungetmouse(&event), "ungetmouse");

23072320

}

23082321

#endif

@@ -2701,14 +2714,15 @@ PyCurses_MouseInterval(PyObject *self, PyObject *args)

27012714

static PyObject *

27022715

PyCurses_MouseMask(PyObject *self, PyObject *args)

27032716

{

2704-

int newmask;

2717+

unsigned long newmask;

27052718

mmask_t oldmask, availmask;

2706271927072720

PyCursesInitialised;

2708-

if (!PyArg_ParseTuple(args,"i;mousemask",&newmask))

2721+

if (!PyArg_ParseTuple(args,"k;mousemask",&newmask))

27092722

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);

27122726

}

27132727

#endif

27142728