mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
Workaround bug in xmlrpclib's string escaping. That library outputs invalid
UTF-8 if given a string containing high-bit characters, so instead pass in Unicode strings, for which the escaping is correct. This fixes a bug seen when the dmesg of a machine contains high bit characters, but I'm sure there are other ways in which it might be triggered. Signed-off-by: Ewan Mellor <ewan@xensource.com>
This commit is contained in:
1 parent
af37573f2c
commit
c0693d2c6e
1 file changed
+11
@@ -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,
|
||||
|
||||