summaryrefslogtreecommitdiffstats
path: root/Lib/importlib/util.py
diff options
context:
space:
mode:
authorNick Coghlan <ncoghlan@gmail.com>2017-03-08 06:41:01 (GMT)
committerGitHub <noreply@github.com>2017-03-08 06:41:01 (GMT)
commit93602e3af70d3b9f98ae2da654b16b3382b68d50 (patch)
tree632030f1074215e980a070e718be27d2096ffe88 /Lib/importlib/util.py
parentbef209d449afcdc391b108d197a95b15902197d9 (diff)
downloadcpython-93602e3af70d3b9f98ae2da654b16b3382b68d50.zip
cpython-93602e3af70d3b9f98ae2da654b16b3382b68d50.tar.gz
cpython-93602e3af70d3b9f98ae2da654b16b3382b68d50.tar.bz2
[3.5] bpo-29537: Tolerate legacy invalid bytecode (#169)
bpo-27286 fixed a problem where BUILD_MAP_UNPACK_WITH_CALL could be emitted with an incorrect oparg value, causing the eval loop to access the wrong stack entry when attempting to read the function name. The associated magic number change caused significant problems when attempting to upgrade to 3.5.3 for anyone that relies on pre-cached bytecode remaining valid across maintenance releases. This patch restores the ability to import legacy bytecode generated by 3.5.0, 3.5.1 or 3.5.2, and modifies the eval loop to avoid any harmful consequences from the potentially malformed legacy bytecode. Original import patch by Petr Viktorin, eval loop patch by Serhiy Storchaka, and tests and integration by Nick Coghlan.
Diffstat (limited to 'Lib/importlib/util.py')
-rw-r--r--Lib/importlib/util.py2
1 files changed, 1 insertions, 1 deletions
diff --git a/Lib/importlib/util.py b/Lib/importlib/util.py
index e1fa07a..a15cf00 100644
--- a/Lib/importlib/util.py
+++ b/Lib/importlib/util.py
@@ -4,7 +4,7 @@ from ._bootstrap import module_from_spec
from ._bootstrap import _resolve_name
from ._bootstrap import spec_from_loader
from ._bootstrap import _find_spec
-from ._bootstrap_external import MAGIC_NUMBER
+from ._bootstrap_external import MAGIC_NUMBER, _BACKCOMPAT_MAGIC_NUMBER
from ._bootstrap_external import cache_from_source
from ._bootstrap_external import decode_source
from ._bootstrap_external import source_from_cache