diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -455,6 +455,20 @@ _wrap(_requires_frozen_wrapper, fxn) return _requires_frozen_wrapper +def _loads_pyc(data): + magic = data[:4] + raw_timestamp = data[4:8] + raw_size = data[8:12] + if magic != _MAGIC_NUMBER: + msg = 'bad magic number: {!r}'.format(magic) + raise ValueError(msg) + elif len(raw_timestamp) != 4: + message = 'bad timestamp' + raise EOFError(message) + elif len(raw_size) != 4: + message = 'bad size' + raise EOFError(message) + return _r_long(raw_timestamp), _r_long(raw_size), data[12:] # Loaders ##################################################################### @@ -587,27 +601,14 @@ If source_stats is None then skip the timestamp check. """ - magic = data[:4] - raw_timestamp = data[4:8] - raw_size = data[8:12] - if magic != _MAGIC_NUMBER: - msg = 'bad magic number in {!r}: {!r}'.format(fullname, magic) - raise ImportError(msg, name=fullname, path=bytecode_path) - elif len(raw_timestamp) != 4: - message = 'bad timestamp in {}'.format(fullname) - _verbose_message(message) - raise EOFError(message) - elif len(raw_size) != 4: - message = 'bad size in {}'.format(fullname) - _verbose_message(message) - raise EOFError(message) + timestamp, size, data = _loads_pyc(data) if source_stats is not None: try: source_mtime = int(source_stats['mtime']) except KeyError: pass else: - if _r_long(raw_timestamp) != source_mtime: + if timestamp != source_mtime: message = 'bytecode is stale for {}'.format(fullname) _verbose_message(message) raise ImportError(message, name=fullname, @@ -617,13 +618,13 @@ except KeyError: pass else: - if _r_long(raw_size) != source_size: + if size != source_size: raise ImportError( "bytecode is stale for {}".format(fullname), name=fullname, path=bytecode_path) # Can't return the code object as errors from marshal loading need to # propagate even when source is available. - return data[12:] + return data @module_for_loader def _load_module(self, module, *, sourceless=False): @@ -714,7 +715,7 @@ bytes_data = self._bytes_from_bytecode(fullname, data, bytecode_path, st) - except (ImportError, EOFError): + except (ValueError, EOFError, ImportError): pass else: _verbose_message('{} matches {}', bytecode_path, @@ -834,7 +835,11 @@ def get_code(self, fullname): path = self.get_filename(fullname) data = self.get_data(path) - bytes_data = self._bytes_from_bytecode(fullname, data, path, None) + try: + bytes_data = _loads_pyc(data)[2] + except Exception as exc: + msg = 'bad data for module {!r}: {!r}'.format(fullname, path) + raise ImportError(msg, name=fullname, path=path) from exc found = marshal.loads(bytes_data) if isinstance(found, _code_type): _verbose_message('code object from {!r}', path) diff --git a/Lib/importlib/test/source/test_file_loader.py b/Lib/importlib/test/source/test_file_loader.py --- a/Lib/importlib/test/source/test_file_loader.py +++ b/Lib/importlib/test/source/test_file_loader.py @@ -435,7 +435,7 @@ def test_magic_only(self): def test(name, mapping, bytecode_path): - with self.assertRaises(EOFError): + with self.assertRaises(ImportError): self.import_(bytecode_path, name) self._test_magic_only(test, del_source=True) @@ -451,14 +451,14 @@ def test_partial_timestamp(self): def test(name, mapping, bytecode_path): - with self.assertRaises(EOFError): + with self.assertRaises(ImportError): self.import_(bytecode_path, name) self._test_partial_timestamp(test, del_source=True) def test_partial_size(self): def test(name, mapping, bytecode_path): - with self.assertRaises(EOFError): + with self.assertRaises(ImportError): self.import_(bytecode_path, name) self._test_partial_size(test, del_source=True) diff --git a/Python/importlib.h b/Python/importlib.h index 224e28c029a7dc4b51e87b6f07a9f213f8d2bcf2..ed54caf8822ff9f4e013a20af512ce4afa81fd32 GIT binary patch literal 210076 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