summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2017-10-12 19:17:46 (GMT)
committerGitHub <noreply@github.com>2017-10-12 19:17:46 (GMT)
commitde072100775cc29e6cd93a75466cecbd1086f258 (patch)
treed07dfdb0d3c5ca964dab28eabc3f97f508de45b4 /Lib/test
parentb7cbfe49e39a7bbd7da20b937735a8a60bbf1872 (diff)
downloadcpython-de072100775cc29e6cd93a75466cecbd1086f258.zip
cpython-de072100775cc29e6cd93a75466cecbd1086f258.tar.gz
cpython-de072100775cc29e6cd93a75466cecbd1086f258.tar.bz2
bpo-30058: Fixed buffer overflow in select.kqueue.control(). (#1095)
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_kqueue.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/Lib/test/test_kqueue.py b/Lib/test/test_kqueue.py
index 9f49886..1099c75 100644
--- a/Lib/test/test_kqueue.py
+++ b/Lib/test/test_kqueue.py
@@ -208,6 +208,30 @@ class TestKQueue(unittest.TestCase):
b.close()
kq.close()
+ def test_issue30058(self):
+ # changelist must be an iterable
+ kq = select.kqueue()
+ a, b = socket.socketpair()
+ ev = select.kevent(a, select.KQ_FILTER_READ, select.KQ_EV_ADD | select.KQ_EV_ENABLE)
+
+ kq.control([ev], 0)
+ # not a list
+ kq.control((ev,), 0)
+ # __len__ is not consistent with __iter__
+ class BadList:
+ def __len__(self):
+ return 0
+ def __iter__(self):
+ for i in range(100):
+ yield ev
+ kq.control(BadList(), 0)
+ # doesn't have __len__
+ kq.control(iter([ev]), 0)
+
+ a.close()
+ b.close()
+ kq.close()
+
def test_close(self):
open_file = open(__file__, "rb")
self.addCleanup(open_file.close)