status/code: return 400 on invalid status code

Request such as `/status/4!9` caused a `ValueError` exception when
trying to cast the status to an int. Now the client is greeted with
`400` and a body of `Invalid status code`.

Fixes #329.
This commit is contained in:
Tuomas Lappeteläinen
2017-02-19 15:44:42 +02:00
parent a22fc1fb65
commit 94e64b4598
2 changed files with 16 additions and 2 deletions
+8 -2
View File
@@ -294,7 +294,10 @@ def view_status_code(codes):
"""Return status code or random status code if more than one are given"""
if ',' not in codes:
code = int(codes)
try:
code = int(codes)
except ValueError:
return Response('Invalid status code', status=400)
return status_code(code)
choices = []
@@ -305,7 +308,10 @@ def view_status_code(codes):
else:
code, weight = choice.split(':')
choices.append((int(code), float(weight)))
try:
choices.append((int(code), float(weight)))
except ValueError:
return Response('Invalid status code', status=400)
code = weighted_choice(choices)
+8
View File
@@ -373,6 +373,14 @@ class HttpbinTestCase(unittest.TestCase):
response = self.app.open(path='/status/418', method=m)
self.assertEqual(response.status_code, 418)
def test_status_endpoint_invalid_code(self):
response = self.app.get(path='/status/4!9')
self.assertEqual(response.status_code, 400)
def test_status_endpoint_invalid_codes(self):
response = self.app.get(path='/status/200,402,foo')
self.assertEqual(response.status_code, 400)
def test_xml_endpoint(self):
response = self.app.get(path='/xml')
self.assertEqual(