diff options
author | Brett Cannon <bcannon@gmail.com> | 2010-02-19 16:05:28 (GMT) |
---|---|---|
committer | Brett Cannon <bcannon@gmail.com> | 2010-02-19 16:05:28 (GMT) |
commit | 39440b14cd4481e138bce568d81663315f1f7cc4 (patch) | |
tree | 6e747519cd196c0e635676d4bd1daad2bca9c163 /Lib/importlib/_bootstrap.py | |
parent | 9603428755a644c01ebfd356e2f90864291a26a8 (diff) | |
download | cpython-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.py | 15 |
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 |