diff options
author | Barry Warsaw <barry@python.org> | 2013-09-30 22:35:15 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 2013-09-30 22:35:15 (GMT) |
commit | 42faa55124abcbb132c57745dec9e0489ac74406 (patch) | |
tree | e2f69e8268e52ee4451fd7892e2e4a3233a6947c /Lib/test | |
parent | e763a91f6ab5c21c94d69f4b6a708542b7db69ab (diff) | |
download | cpython-42faa55124abcbb132c57745dec9e0489ac74406.zip cpython-42faa55124abcbb132c57745dec9e0489ac74406.tar.gz cpython-42faa55124abcbb132c57745dec9e0489ac74406.tar.bz2 |
- Issue #16040: CVE-2013-1752: nntplib: Limit maximum line lengths to 2048 to
prevent readline() calls from consuming too much memory. Patch by Jyrki
Pulliainen.
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/test_nntplib.py | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/Lib/test/test_nntplib.py b/Lib/test/test_nntplib.py new file mode 100644 index 0000000..31d41e6 --- /dev/null +++ b/Lib/test/test_nntplib.py @@ -0,0 +1,65 @@ +import socket +import threading +import nntplib +import time + +from unittest import TestCase +from test import test_support + +HOST = test_support.HOST + + +def server(evt, serv, evil=False): + serv.listen(5) + try: + conn, addr = serv.accept() + except socket.timeout: + pass + else: + if evil: + conn.send("1 I'm too long response" * 3000 + "\n") + else: + conn.send("1 I'm OK response\n") + conn.close() + finally: + serv.close() + evt.set() + + +class BaseServerTest(TestCase): + def setUp(self): + self.evt = threading.Event() + self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + self.sock.settimeout(3) + self.port = test_support.bind_port(self.sock) + threading.Thread( + target=server, + args=(self.evt, self.sock, self.evil)).start() + time.sleep(.1) + + def tearDown(self): + self.evt.wait() + + +class ServerTests(BaseServerTest): + evil = False + + def test_basic_connect(self): + nntp = nntplib.NNTP('localhost', self.port) + nntp.sock.close() + + +class EvilServerTests(BaseServerTest): + evil = True + + def test_too_long_line(self): + self.assertRaises(nntplib.NNTPDataError, + nntplib.NNTP, 'localhost', self.port) + + +def test_main(verbose=None): + test_support.run_unittest(EvilServerTests) + test_support.run_unittest(ServerTests) + +if __name__ == '__main__': + test_main() |