mirror of https://github.com/python/cpython
Issue #15343: A lot more than just unicode decoding can go wrong when retrieving a source file
This commit is contained in:
parent
8ecf50474c
commit
2824cb507d
|
@ -845,12 +845,21 @@ class SourceLoader(_LoaderBasics):
|
|||
path = self.get_filename(fullname)
|
||||
try:
|
||||
source_bytes = self.get_data(path)
|
||||
except IOError:
|
||||
except IOError as exc:
|
||||
raise ImportError("source not available through get_data()",
|
||||
name=fullname)
|
||||
encoding = tokenize.detect_encoding(_io.BytesIO(source_bytes).readline)
|
||||
name=fullname) from exc
|
||||
readsource = _io.BytesIO(source_bytes).readline
|
||||
try:
|
||||
encoding = tokenize.detect_encoding(readsource)
|
||||
except SyntaxError as exc:
|
||||
raise ImportError("Failed to detect encoding",
|
||||
name=fullname) from exc
|
||||
newline_decoder = _io.IncrementalNewlineDecoder(None, True)
|
||||
return newline_decoder.decode(source_bytes.decode(encoding[0]))
|
||||
try:
|
||||
return newline_decoder.decode(source_bytes.decode(encoding[0]))
|
||||
except UnicodeDecodeError as exc:
|
||||
raise ImportError("Failed to decode source file",
|
||||
name=fullname) from exc
|
||||
|
||||
def get_code(self, fullname):
|
||||
"""Concrete implementation of InspectLoader.get_code.
|
||||
|
|
|
@ -2048,7 +2048,7 @@ class ModuleScanner:
|
|||
if hasattr(loader, 'get_source'):
|
||||
try:
|
||||
source = loader.get_source(modname)
|
||||
except UnicodeDecodeError:
|
||||
except Exception:
|
||||
if onerror:
|
||||
onerror(modname)
|
||||
continue
|
||||
|
|
4267
Python/importlib.h
4267
Python/importlib.h
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue