From 7bfca5bcd79832c0d032d2e657018e2c79b75161 Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sat, 23 Dec 2017 21:18:04 +0100 Subject: [PATCH] Don't cast bytes to strings when unpickling --- jedi/evaluate/compiled/subprocess/__init__.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/jedi/evaluate/compiled/subprocess/__init__.py b/jedi/evaluate/compiled/subprocess/__init__.py index a56b6bec..c2877fcd 100644 --- a/jedi/evaluate/compiled/subprocess/__init__.py +++ b/jedi/evaluate/compiled/subprocess/__init__.py @@ -14,7 +14,7 @@ import weakref import pickle from functools import partial -from jedi._compatibility import queue +from jedi._compatibility import queue, is_py3 from jedi.cache import memoize_method from jedi.evaluate.compiled.subprocess import functions from jedi.evaluate.compiled.access import DirectObjectAccess, AccessPath, \ @@ -35,6 +35,13 @@ def get_subprocess(executable): return sub +def _pickle_load(file): + if is_py3: + return pickle.load(file, encoding='bytes') + else: + return pickle.load(file) + + def _get_function(name): return getattr(functions, name) @@ -138,7 +145,7 @@ class _Subprocess(object): data = evaluator_id, function, args, kwargs pickle.dump(data, self._process.stdin, protocol=_PICKLE_PROTOCOL) self._process.stdin.flush() - is_exception, result = pickle.load(self._process.stdout) + is_exception, result = _pickle_load(self._process.stdout) if is_exception: raise result return result @@ -237,7 +244,7 @@ class Listener(object): while True: try: - payload = pickle.load(stdin) + payload = _pickle_load(stdin) except EOFError: # It looks like the parent process closed. Don't make a big fuss # here and just exit.