[ovs-dev] [PATCH 2/2 v2] Work around Python/C JSON unicode differences
Lucas Alvares Gomes
lucasagomes at gmail.com
Tue Oct 9 16:45:22 UTC 2018
On Tue, Oct 9, 2018 at 5:33 PM Terry Wilson <twilson at redhat.com> wrote:
>
> 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 at redhat.com>
> ---
> python/ovs/jsonrpc.py | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/python/ovs/jsonrpc.py b/python/ovs/jsonrpc.py
> index 4873cff..1323ba7 100644
> --- a/python/ovs/jsonrpc.py
> +++ b/python/ovs/jsonrpc.py
> @@ -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:
> --
> 1.8.3.1
>
> _______________________________________________
> dev mailing list
> dev at openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
Acked-By: Lucas Alvares Gomes <lucasagomes at gmail.com>
More information about the dev
mailing list