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