From 5646b96119947ba1b3086ac598d9c97bee3fca58 Mon Sep 17 00:00:00 2001 From: Brian Elliott Date: Thu, 9 Aug 2012 22:51:11 +0000 Subject: Fix TypeError conversion in API layer Fix conversion of TypeError to Fault in ResourceExceptionHandler. TypeError can result when the list of extensions is inovked if the parameters don't match the extension method's signature. Specifically, if an empty body was sent with an HTTP POST to create a server, a 500 error was returned. This change is a fix to properly return a 400 instead. (In Python2.6, the ex_value argument of __exit__ is type string when ex_type is a TypeError, which caused the conversion logic to get skipped.) bug 1035120 Change-Id: I96ad335a6338523345d28b7e744dbc7449b4753d --- nova/api/openstack/wsgi.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'nova/api') diff --git a/nova/api/openstack/wsgi.py b/nova/api/openstack/wsgi.py index 3ea7c1c7c..9f8bf6367 100644 --- a/nova/api/openstack/wsgi.py +++ b/nova/api/openstack/wsgi.py @@ -628,7 +628,11 @@ class ResourceExceptionHandler(object): elif isinstance(ex_value, exception.Invalid): raise Fault(exception.ConvertedException( code=ex_value.code, explanation=unicode(ex_value))) - elif isinstance(ex_value, TypeError): + + # Under python 2.6, TypeError's exception value is actually a string, + # so test # here via ex_type instead: + # http://bugs.python.org/issue7853 + elif issubclass(ex_type, TypeError): exc_info = (ex_type, ex_value, ex_traceback) LOG.error(_('Exception handling resource: %s') % ex_value, exc_info=exc_info) -- cgit