diff --git a/tools/python/xen/util/xmlrpclib2.py b/tools/python/xen/util/xmlrpclib2.py index c0f769f6f2..65aa49ced5 100644 --- a/tools/python/xen/util/xmlrpclib2.py +++ b/tools/python/xen/util/xmlrpclib2.py @@ -20,6 +20,8 @@ An enhanced XML-RPC client/server interface for Python. """ +import types + from httplib import HTTPConnection, HTTP from xmlrpclib import Transport from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler @@ -77,6 +79,15 @@ class TCPXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer): else: response = self._dispatch(method, params) + # Convert strings to unicode strings so that they are escaped + # properly by xmlrpclib. We use latin-1 here, but any + # ASCII-compatible scheme would do -- we just care about getting + # the bytes across the wire. + # Any message handler that actually cares about the charset in + # use should be returning Unicode strings. + if isinstance(response, types.StringType): + response = unicode(response, 'iso-8859-1') + response = (response,) response = xmlrpclib.dumps(response, methodresponse=1,