You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by pq...@apache.org on 2010/08/13 02:57:03 UTC

svn commit: r985058 - /incubator/libcloud/trunk/libcloud/drivers/ec2.py

Author: pquerna
Date: Fri Aug 13 00:57:02 2010
New Revision: 985058

URL: http://svn.apache.org/viewvc?rev=985058&view=rev
Log:
Add MalformedResponseError checking for EC2 driver

Modified:
    incubator/libcloud/trunk/libcloud/drivers/ec2.py

Modified: incubator/libcloud/trunk/libcloud/drivers/ec2.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/drivers/ec2.py?rev=985058&r1=985057&r2=985058&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/drivers/ec2.py (original)
+++ incubator/libcloud/trunk/libcloud/drivers/ec2.py Fri Aug 13 00:57:02 2010
@@ -17,7 +17,7 @@
 Amazon EC2 driver
 """
 from libcloud.providers import Provider
-from libcloud.types import NodeState, InvalidCredsError
+from libcloud.types import NodeState, InvalidCredsError, MalformedResponseError
 from libcloud.base import Node, Response, ConnectionUserAndKey
 from libcloud.base import NodeDriver, NodeSize, NodeImage, NodeLocation
 import base64
@@ -145,7 +145,11 @@ class EC2Response(Response):
     def parse_body(self):
         if not self.body:
             return None
-        return ET.XML(self.body)
+        try:
+          body = ET.XML(self.body)
+        except:
+          raise MalformedResponseError("Failed to parse XML", body=self.body, driver=EC2NodeDriver)
+        return body
 
     def parse_error(self):
         err_list = []
@@ -155,7 +159,12 @@ class EC2Response(Response):
         if self.status == 403 and self.body[:len(msg)] == msg:
             raise InvalidCredsError(msg)
 
-        for err in ET.XML(self.body).findall('Errors/Error'):
+        try:
+          body = ET.XML(self.body)
+        except:
+          raise MalformedResponseError("Failed to parse XML", body=self.body, driver=EC2NodeDriver)
+
+        for err in body.findall('Errors/Error'):
             code, message = err.getchildren()
             err_list.append("%s: %s" % (code.text, message.text))
             if code.text == "InvalidClientTokenId":