"""Find modules used by a script, using introspection."""
import dis
-import imp
++import importlib._bootstrap
import importlib.machinery
import marshal
import os
if type == imp.PY_SOURCE:
co = compile(fp.read()+'\n', pathname, 'exec')
elif type == imp.PY_COMPILED:
-- if fp.read(4) != imp.get_magic():
-- self.msgout(2, "raise ImportError: Bad magic number", pathname)
-- raise ImportError("Bad magic number in %s" % pathname)
- fp.read(4)
- fp.read(8) # Skip mtime and size.
-- co = marshal.load(fp)
++ try:
++ marshal_data = importlib._bootstrap._validate_bytecode_header(fp.read())
++ except ImportError as exc:
++ self.msgout(2, "raise ImportError: " + str(exc), pathname)
++ raise
++ co = marshal.loads(marshal_data)
else:
co = None
m = self.add_module(fqname)