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

``