summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorAlex Meade <alex.meade@rackspace.com>2011-06-14 10:16:51 -0400
committerAlex Meade <alex.meade@rackspace.com>2011-06-14 10:16:51 -0400
commita3ddb45464204464c93b1deb692414c44ce99376 (patch)
tree6d3b802299d861e9378f5122b40539ddd4d4fba8 /nova/api
parent035e43fbcc39d5664592873629f0689309c102cf (diff)
downloadnova-a3ddb45464204464c93b1deb692414c44ce99376.tar.gz
nova-a3ddb45464204464c93b1deb692414c44ce99376.tar.xz
nova-a3ddb45464204464c93b1deb692414c44ce99376.zip
Created new exception for handling malformed requests
Wrote tests Raise httpBadRequest on malformed request bodies
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/wsgi.py16
1 files changed, 13 insertions, 3 deletions
diff --git a/nova/api/openstack/wsgi.py b/nova/api/openstack/wsgi.py
index b0e2cab2c..7f17471c4 100644
--- a/nova/api/openstack/wsgi.py
+++ b/nova/api/openstack/wsgi.py
@@ -2,6 +2,7 @@
import json
import webob
from xml.dom import minidom
+from xml.parsers.expat import ExpatError
from nova import exception
from nova import log as logging
@@ -71,7 +72,10 @@ class TextDeserializer(object):
class JSONDeserializer(TextDeserializer):
def default(self, datastring):
- return utils.loads(datastring)
+ try:
+ return utils.loads(datastring)
+ except ValueError:
+ raise exception.MalformedRequestBody()
class XMLDeserializer(TextDeserializer):
@@ -86,8 +90,12 @@ class XMLDeserializer(TextDeserializer):
def default(self, datastring):
plurals = set(self.metadata.get('plurals', {}))
- node = minidom.parseString(datastring).childNodes[0]
- return {node.nodeName: self._from_xml_node(node, plurals)}
+
+ try:
+ node = minidom.parseString(datastring).childNodes[0]
+ return {node.nodeName: self._from_xml_node(node, plurals)}
+ except ExpatError:
+ raise exception.MalformedRequestBody()
def _from_xml_node(self, node, listnames):
"""Convert a minidom node to a simple Python type.
@@ -353,6 +361,8 @@ class Resource(wsgi.Application):
request)
except exception.InvalidContentType:
return webob.exc.HTTPBadRequest(_("Unsupported Content-Type"))
+ except exception.MalformedRequestBody:
+ return webob.exc.HTTPBadRequest(_("Malformed request"))
action_result = self.dispatch(request, action, action_args)