summaryrefslogtreecommitdiffstats
path: root/Lib/importlib/_bootstrap.py
diff options
context:
space:
mode:
authorBrett Cannon <bcannon@gmail.com>2010-02-19 16:05:28 (GMT)
committerBrett Cannon <bcannon@gmail.com>2010-02-19 16:05:28 (GMT)
commit39440b14cd4481e138bce568d81663315f1f7cc4 (patch)
tree6e747519cd196c0e635676d4bd1daad2bca9c163 /Lib/importlib/_bootstrap.py
parent9603428755a644c01ebfd356e2f90864291a26a8 (diff)
downloadcpython-39440b14cd4481e138bce568d81663315f1f7cc4.zip
cpython-39440b14cd4481e138bce568d81663315f1f7cc4.tar.gz
cpython-39440b14cd4481e138bce568d81663315f1f7cc4.tar.bz2
Merged revisions 78242 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r78242 | brett.cannon | 2010-02-19 11:01:06 -0500 (Fri, 19 Feb 2010) | 5 lines Importlib was not matching import's handling of .pyc files where it had less then 8 bytes total in the file. Fixes issues 7361 & 7875. ........
Diffstat (limited to 'Lib/importlib/_bootstrap.py')
-rw-r--r--Lib/importlib/_bootstrap.py15
1 files changed, 10 insertions, 5 deletions
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
index 03350b5..f81a390 100644
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -407,19 +407,24 @@ class PyPycLoader(PyLoader):
bytecode_path = self.bytecode_path(fullname)
if bytecode_path:
data = self.get_data(bytecode_path)
- magic = data[:4]
- pyc_timestamp = marshal._r_long(data[4:8])
- bytecode = data[8:]
try:
+ magic = data[:4]
+ if len(magic) < 4:
+ raise ImportError("bad magic number in {}".format(fullname))
+ raw_timestamp = data[4:8]
+ if len(raw_timestamp) < 4:
+ raise EOFError("bad timestamp in {}".format(fullname))
+ pyc_timestamp = marshal._r_long(raw_timestamp)
+ bytecode = data[8:]
# Verify that the magic number is valid.
if imp.get_magic() != magic:
- raise ImportError("bad magic number")
+ raise ImportError("bad magic number in {}".format(fullname))
# Verify that the bytecode is not stale (only matters when
# there is source to fall back on.
if source_timestamp:
if pyc_timestamp < source_timestamp:
raise ImportError("bytecode is stale")
- except ImportError:
+ except (ImportError, EOFError):
# If source is available give it a shot.
if source_timestamp is not None:
pass