diff Lib/importlib/_bootstrap.py @ 58960:52823820dce1 3.1

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. ........
author Brett Cannon <bcannon@gmail.com>
date Fri, 19 Feb 2010 16:05:28 +0000
parents e25288bb6faf
children 0991b40e895d 3c9232a684ae
line wrap: on
line diff
--- a/Lib/importlib/_bootstrap.py	Fri Feb 19 14:51:06 2010 +0000
+++ b/Lib/importlib/_bootstrap.py	Fri Feb 19 16:05:28 2010 +0000
@@ -407,19 +407,24 @@
         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