@@ -272,7 +272,8 @@ class Connection(object):
# data, so we convert it here as soon as possible.
if data and not error:
try:
- data = decoder.decode(data)
+ if six.PY3 or ovs.json.PARSER == ovs.json.PARSER_PY:
+ data = decoder.decode(data)
except UnicodeError:
error = errno.EILSEQ
if error:
@@ -298,7 +299,11 @@ class Connection(object):
else:
if self.parser is None:
self.parser = ovs.json.Parser()
- self.input = self.input[self.parser.feed(self.input):]
+ if six.PY3 and ovs.json.PARSER == ovs.json.PARSER_C:
+ self.input = self.input.encode('utf-8')[
+ self.parser.feed(self.input):].decode()
+ else:
+ self.input = self.input[self.parser.feed(self.input):]
if self.parser.is_done():
msg = self.__process_msg()
if msg:
The OVS C-based JSON parser operates on bytes, so the parser_feed function returns the number of bytes that are processed. The pure Python JSON parser currently operates on unicode, so it expects that Parser.feed() returns a number of characters. This difference leads to parsing errors when unicode characters are passed to the C JSON parser from Python. Signed-off-by: Terry Wilson <twilson@redhat.com> --- python/ovs/jsonrpc.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)