PY2/3 changes to pickle so py2.7 and py3.5+ pickles used in sconsign will be readable...
authorWilliam Deegan <bill@baddogconsulting.com>
Mon, 11 Sep 2017 03:54:12 +0000 (20:54 -0700)
committerWilliam Deegan <bill@baddogconsulting.com>
Mon, 11 Sep 2017 03:54:12 +0000 (20:54 -0700)
src/engine/SCons/compat/__init__.py
src/engine/SCons/dblite.py

index 59a1a94ddd0b41189c42bf65aeec685f203efee1..0b6c016a177f1476ba7517bca81b6677b30f92ad 100644 (file)
@@ -96,7 +96,9 @@ rename_module('pickle', 'cPickle')
 # Negative numbers choose the highest available protocol.
 import pickle
 
-PICKLE_PROTOCOL = pickle.HIGHEST_PROTOCOL
+# Was pickle.HIGHEST_PROTOCOL
+# Changed to 2 so py3.5+'s pickle will be compatible with py2.7.
+PICKLE_PROTOCOL = 2
 
 # TODO: FIXME
 # In 3.x, 'profile' automatically loads the fast version if available.
index a9b9589a29a9bcdd702deaa11015173c3b1c3143..87a17631d7e8cf25fffa3381eaee5688857ca83c 100644 (file)
@@ -119,7 +119,10 @@ class dblite(object):
                 p = f.read()
                 if len(p) > 0:
                     try:
-                        self._dict = pickle.loads(p)
+                        if bytes is not str:
+                            self._dict = pickle.loads(p, encoding='bytes')
+                        else:
+                            self._dict = pickle.loads(p)
                     except (pickle.UnpicklingError, EOFError, KeyError):
                         # Note how we catch KeyErrors too here, which might happen
                         # when we don't have cPickle available (default pickle