mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
Issue #15989: Fix several occurrences of integer overflow
when result of PyInt_AsLong() or PyLong_AsLong() narrowed to int without checks. This is a backport of changesets 13e2e44db99d and 525407d89277.
This commit is contained in:
parent
ac7b49f407
commit
74f49ab28b
17 changed files with 143 additions and 22 deletions
|
@ -343,10 +343,13 @@ update_ufd_array(pollObject *self)
|
|||
|
||||
i = pos = 0;
|
||||
while (PyDict_Next(self->dict, &pos, &key, &value)) {
|
||||
self->ufds[i].fd = PyInt_AsLong(key);
|
||||
assert(i < self->ufd_len);
|
||||
/* Never overflow */
|
||||
self->ufds[i].fd = (int)PyInt_AsLong(key);
|
||||
self->ufds[i].events = (short)PyInt_AsLong(value);
|
||||
i++;
|
||||
}
|
||||
assert(i == self->ufd_len);
|
||||
self->ufd_uptodate = 1;
|
||||
return 1;
|
||||
}
|
||||
|
@ -362,10 +365,11 @@ static PyObject *
|
|||
poll_register(pollObject *self, PyObject *args)
|
||||
{
|
||||
PyObject *o, *key, *value;
|
||||
int fd, events = POLLIN | POLLPRI | POLLOUT;
|
||||
int fd;
|
||||
short events = POLLIN | POLLPRI | POLLOUT;
|
||||
int err;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "O|i:register", &o, &events)) {
|
||||
if (!PyArg_ParseTuple(args, "O|h:register", &o, &events)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -503,7 +507,7 @@ poll_poll(pollObject *self, PyObject *args)
|
|||
tout = PyNumber_Int(tout);
|
||||
if (!tout)
|
||||
return NULL;
|
||||
timeout = PyInt_AsLong(tout);
|
||||
timeout = _PyInt_AsInt(tout);
|
||||
Py_DECREF(tout);
|
||||
if (timeout == -1 && PyErr_Occurred())
|
||||
return NULL;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue