From f8467bfcef0795153fa7b6488bf866b6628669af Mon Sep 17 00:00:00 2001 From: Alex Meade Date: Thu, 23 Aug 2012 11:10:28 -0400 Subject: [PATCH] HTTPBadRequest in v2 on malformed JSON request body. Fixes bug 1039901 Change-Id: I79ff2059f8f4de60cc92f8cf89cd80be74529e3c --- glance/common/wsgi.py | 6 +++++- glance/tests/unit/test_wsgi.py | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/glance/common/wsgi.py b/glance/common/wsgi.py index 446e758d16..ca00012a0d 100644 --- a/glance/common/wsgi.py +++ b/glance/common/wsgi.py @@ -455,7 +455,11 @@ def has_body(self, request): return False def from_json(self, datastring): - return json.loads(datastring) + try: + return json.loads(datastring) + except ValueError: + msg = _('Malformed JSON in request body.') + raise webob.exc.HTTPBadRequest(explanation=msg) def default(self, request): if self.has_body(request): diff --git a/glance/tests/unit/test_wsgi.py b/glance/tests/unit/test_wsgi.py index 7b97eec066..dfe415e900 100644 --- a/glance/tests/unit/test_wsgi.py +++ b/glance/tests/unit/test_wsgi.py @@ -177,6 +177,11 @@ def test_from_json(self): actual = wsgi.JSONRequestDeserializer().from_json(fixture) self.assertEqual(actual, expected) + def test_from_json_malformed(self): + fixture = 'kjasdklfjsklajf' + self.assertRaises(webob.exc.HTTPBadRequest, + wsgi.JSONRequestDeserializer().from_json, fixture) + def test_default_no_body(self): request = wsgi.Request.blank('/') actual = wsgi.JSONRequestDeserializer().default(request)