summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES5
-rw-r--r--tests/test_serving.py16
-rw-r--r--werkzeug/serving.py5
3 files changed, 25 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index d0c4dc6a..e4c46421 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,11 @@
Werkzeug Changelog
==================
+Version 0.11.5
+--------------
+
+- werkzeug.serving: Fix crash when attempting SSL connection to HTTP server.
+
Version 0.11.4
--------------
diff --git a/tests/test_serving.py b/tests/test_serving.py
index 7babcd0d..d4268180 100644
--- a/tests/test_serving.py
+++ b/tests/test_serving.py
@@ -196,3 +196,19 @@ def test_monkeypached_sleep(tmpdir):
ReloaderLoop()._sleep(0)
'''))
subprocess.check_call(['python', str(script)])
+
+
+def test_wrong_protocol(dev_server):
+ # Assert that sending HTTPS requests to a HTTP server doesn't show a
+ # traceback
+ # See https://github.com/mitsuhiko/werkzeug/pull/838
+
+ server = dev_server('''
+ def app(environ, start_response):
+ start_response('200 OK', [('Content-Type', 'text/html')])
+ return [b'hello']
+ ''')
+ with pytest.raises(requests.exceptions.ConnectionError):
+ requests.get('https://%s/' % server.addr)
+
+ assert 'Traceback' not in server.logfile.read()
diff --git a/werkzeug/serving.py b/werkzeug/serving.py
index 15b6cd70..712cdc55 100644
--- a/werkzeug/serving.py
+++ b/werkzeug/serving.py
@@ -263,7 +263,10 @@ class WSGIRequestHandler(BaseHTTPRequestHandler, object):
return BaseHTTPRequestHandler.version_string(self).strip()
def address_string(self):
- return self.environ['REMOTE_ADDR']
+ if getattr(self, 'environ', None):
+ return self.environ['REMOTE_ADDR']
+ else:
+ return ''
def log_request(self, code='-', size='-'):
self.log('info', '"%s" %s %s', self.requestline, code, size)