mirror of https://github.com/python/cpython.git
Issue #16230: Fix a crash in select.select() when one the lists changes size while iterated on.
Patch by Serhiy Storchaka.
This commit is contained in:
commit
787fbe9d6b
|
@ -65,6 +65,16 @@ def test_select(self):
|
||||||
self.fail('Unexpected return values from select():', rfd, wfd, xfd)
|
self.fail('Unexpected return values from select():', rfd, wfd, xfd)
|
||||||
p.close()
|
p.close()
|
||||||
|
|
||||||
|
# Issue 16230: Crash on select resized list
|
||||||
|
def test_select_mutated(self):
|
||||||
|
a = []
|
||||||
|
class F:
|
||||||
|
def fileno(self):
|
||||||
|
del a[-1]
|
||||||
|
return sys.__stdout__.fileno()
|
||||||
|
a[:] = [F()] * 10
|
||||||
|
self.assertEqual(select.select([], a, []), ([], a[:5], []))
|
||||||
|
|
||||||
def test_main():
|
def test_main():
|
||||||
support.run_unittest(SelectTestCase)
|
support.run_unittest(SelectTestCase)
|
||||||
support.reap_children()
|
support.reap_children()
|
||||||
|
|
|
@ -85,6 +85,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #16230: Fix a crash in select.select() when one the lists changes
|
||||||
|
size while iterated on. Patch by Serhiy Storchaka.
|
||||||
|
|
||||||
- Issue #16228: Fix a crash in the json module where a list changes size
|
- Issue #16228: Fix a crash in the json module where a list changes size
|
||||||
while it is being encoded. Patch by Serhiy Storchaka.
|
while it is being encoded. Patch by Serhiy Storchaka.
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,7 @@ seq2set(PyObject *seq, fd_set *set, pylist fd2obj[FD_SETSIZE + 1])
|
||||||
{
|
{
|
||||||
int max = -1;
|
int max = -1;
|
||||||
int index = 0;
|
int index = 0;
|
||||||
Py_ssize_t i, len = -1;
|
Py_ssize_t i;
|
||||||
PyObject* fast_seq = NULL;
|
PyObject* fast_seq = NULL;
|
||||||
PyObject* o = NULL;
|
PyObject* o = NULL;
|
||||||
|
|
||||||
|
@ -95,9 +95,7 @@ seq2set(PyObject *seq, fd_set *set, pylist fd2obj[FD_SETSIZE + 1])
|
||||||
if (!fast_seq)
|
if (!fast_seq)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
len = PySequence_Fast_GET_SIZE(fast_seq);
|
for (i = 0; i < PySequence_Fast_GET_SIZE(fast_seq); i++) {
|
||||||
|
|
||||||
for (i = 0; i < len; i++) {
|
|
||||||
SOCKET v;
|
SOCKET v;
|
||||||
|
|
||||||
/* any intervening fileno() calls could decr this refcnt */
|
/* any intervening fileno() calls could decr this refcnt */
|
||||||
|
|
Loading…
Reference in New Issue