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

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

`

639

639

`static PyObject *

`

640

640

`PyCursesWindow_Box(PyCursesWindowObject *self, PyObject *args)

`

641

641

`{

`

``

642

`+

PyObject *temp1, *temp2;

`

642

643

`chtype ch1=0,ch2=0;

`

643

644

`switch(PyTuple_Size(args)){

`

644

645

`case 0: break;

`

645

646

`default:

`

646

``

`-

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

`

``

647

`+

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

`

647

648

`return NULL;

`

``

649

`+

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

`

``

650

`+

return NULL;

`

``

651

`+

}

`

``

652

`+

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

`

``

653

`+

return NULL;

`

``

654

`+

}

`

648

655

` }

`

649

656

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

`

650

657

`Py_INCREF(Py_None);

`

`@@ -1826,24 +1833,30 @@ PyCurses_GetMouse(PyObject *self)

`

1826

1833

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

`

1827

1834

`return NULL;

`

1828

1835

` }

`

1829

``

`-

return Py_BuildValue("(hiiil)",

`

``

1836

`+

return Py_BuildValue("(hiiik)",

`

1830

1837

` (short)event.id,

`

1831

``

`-

event.x, event.y, event.z,

`

1832

``

`-

(long) event.bstate);

`

``

1838

`+

(int)event.x, (int)event.y, (int)event.z,

`

``

1839

`+

(unsigned long) event.bstate);

`

1833

1840

`}

`

1834

1841

``

1835

1842

`static PyObject *

`

1836

1843

`PyCurses_UngetMouse(PyObject *self, PyObject *args)

`

1837

1844

`{

`

1838

1845

`MEVENT event;

`

``

1846

`+

short id;

`

``

1847

`+

int x, y, z;

`

``

1848

`+

unsigned long bstate;

`

1839

1849

``

1840

1850

`PyCursesInitialised;

`

1841

``

`-

if (!PyArg_ParseTuple(args, "hiiil",

`

1842

``

`-

&event.id,

`

1843

``

`-

&event.x, &event.y, &event.z,

`

1844

``

`-

(int *) &event.bstate))

`

``

1851

`+

if (!PyArg_ParseTuple(args, "hiiik",

`

``

1852

`+

&id, &x, &y, &z, &bstate))

`

1845

1853

`return NULL;

`

1846

1854

``

``

1855

`+

event.id = id;

`

``

1856

`+

event.x = x;

`

``

1857

`+

event.y = y;

`

``

1858

`+

event.z = z;

`

``

1859

`+

event.bstate = bstate;

`

1847

1860

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

`

1848

1861

`}

`

1849

1862

`#endif

`

`@@ -2200,14 +2213,15 @@ PyCurses_MouseInterval(PyObject *self, PyObject *args)

`

2200

2213

`static PyObject *

`

2201

2214

`PyCurses_MouseMask(PyObject *self, PyObject *args)

`

2202

2215

`{

`

2203

``

`-

int newmask;

`

``

2216

`+

unsigned long newmask;

`

2204

2217

`mmask_t oldmask, availmask;

`

2205

2218

``

2206

2219

`PyCursesInitialised;

`

2207

``

`-

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

`

``

2220

`+

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

`

2208

2221

`return NULL;

`

2209

``

`-

availmask = mousemask(newmask, &oldmask);

`

2210

``

`-

return Py_BuildValue("(ll)", (long)availmask, (long)oldmask);

`

``

2222

`+

availmask = mousemask((mmask_t)newmask, &oldmask);

`

``

2223

`+

return Py_BuildValue("(kk)",

`

``

2224

`+

(unsigned long)availmask, (unsigned long)oldmask);

`

2211

2225

`}

`

2212

2226

`#endif

`

2213

2227

``