summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_socket_ssl.py
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2003-06-30 03:25:20 (GMT)
committerNeal Norwitz <nnorwitz@gmail.com>2003-06-30 03:25:20 (GMT)
commita9002f824bdca26700a9a6e7b7e6b36a9482e345 (patch)
tree4e8f7fac0afb3e32db43fba58d3e52d9c3b99e0c /Lib/test/test_socket_ssl.py
parentb346096b656aa23e38edc88de60c3b6dbbaef898 (diff)
downloadcpython-a9002f824bdca26700a9a6e7b7e6b36a9482e345.zip
cpython-a9002f824bdca26700a9a6e7b7e6b36a9482e345.tar.gz
cpython-a9002f824bdca26700a9a6e7b7e6b36a9482e345.tar.bz2
Fix SF #754870, SSL crash interpreter when remote side closes during connect
Also fix a memory leak.
Diffstat (limited to 'Lib/test/test_socket_ssl.py')
-rw-r--r--Lib/test/test_socket_ssl.py38
1 files changed, 37 insertions, 1 deletions
diff --git a/Lib/test/test_socket_ssl.py b/Lib/test/test_socket_ssl.py
index eb00b9b..ccb8318 100644
--- a/Lib/test/test_socket_ssl.py
+++ b/Lib/test/test_socket_ssl.py
@@ -2,13 +2,14 @@
from test import test_support
import socket
+import time
# Optionally test SSL support. This requires the 'network' resource as given
# on the regrtest command line.
skip_expected = not (test_support.is_resource_enabled('network') and
hasattr(socket, "ssl"))
-def test_main():
+def test_basic():
test_support.requires('network')
if not hasattr(socket, "ssl"):
raise test_support.TestSkipped("socket module has no ssl support")
@@ -28,5 +29,40 @@ def test_main():
buf = f.read()
f.close()
+def test_rude_shutdown():
+ try:
+ import thread
+ except ImportError:
+ return
+
+ # some random port to connect to
+ PORT = 9934
+ def listener():
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ s.bind(('', PORT))
+ s.listen(5)
+ s.accept()
+ del s
+ thread.exit()
+
+ def connector():
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ s.connect(('', PORT))
+ try:
+ ssl_sock = socket.ssl(s)
+ except socket.sslerror:
+ pass
+ else:
+ raise test_support.TestFailed, \
+ 'connecting to closed SSL socket failed'
+
+ thread.start_new_thread(listener, ())
+ time.sleep(1)
+ connector()
+
+def test_main():
+ test_rude_shutdown()
+ test_basic()
+
if __name__ == "__main__":
test_main()