diff options
| author | Markus Unterwaditzer <markus@unterwaditzer.net> | 2016-03-22 18:33:51 +0100 |
|---|---|---|
| committer | Markus Unterwaditzer <markus@unterwaditzer.net> | 2016-03-22 19:02:38 +0100 |
| commit | 681d923fb218e30c63a88b91125d8ca31d5d51fb (patch) | |
| tree | cc3048ee5e452bd3122d38450259e709a27dced6 | |
| parent | 7301cfb8a0e5427d9f0193335d766fdf38612b6f (diff) | |
| download | werkzeug-missing-env.tar.gz | |
Fix crash when calling HTTP server with HTTPSmissing-env
Fix #838
Fix #873
| -rw-r--r-- | CHANGES | 5 | ||||
| -rw-r--r-- | tests/test_serving.py | 16 | ||||
| -rw-r--r-- | werkzeug/serving.py | 5 |
3 files changed, 25 insertions, 1 deletions
@@ -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) |
