diff options
author | Brett Cannon <bcannon@gmail.com> | 2007-02-15 22:54:39 +0000 |
---|---|---|
committer | Brett Cannon <bcannon@gmail.com> | 2007-02-15 22:54:39 +0000 |
commit | 971a012ce178d1b50b272bc035bfcc795e73c781 (patch) | |
tree | bb3651debb9a00d817847dafc90cceea24b0bc4f | |
parent | 9cb37fc5d02564b618aceb90d0f51dd56b1b505b (diff) | |
download | cpython-git-971a012ce178d1b50b272bc035bfcc795e73c781.tar.gz |
Update the encoding package's search function to use absolute imports when
calling __import__. This helps make the expected search locations for encoding
modules be more explicit.
One could use an explicit value for __path__ when making the call to __import__
to force the exact location searched for encodings. This would give the most
strict search path possible if one is worried about malicious code being
imported. The unfortunate side-effect of that is that if __path__ was modified
on 'encodings' on purpose in a safe way it would not be picked up in future
__import__ calls.
-rw-r--r-- | Lib/encodings/__init__.py | 6 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
2 files changed, 7 insertions, 2 deletions
diff --git a/Lib/encodings/__init__.py b/Lib/encodings/__init__.py index 6cf608954c..190b3c4950 100644 --- a/Lib/encodings/__init__.py +++ b/Lib/encodings/__init__.py @@ -93,8 +93,10 @@ def search_function(encoding): if not modname or '.' in modname: continue try: - mod = __import__('encodings.' + modname, - globals(), locals(), _import_tail) + # Import equivalent to `` from .modname import *``. + # '*' is used so that __import__ returns the desired module and not + # 'encodings' itself. + mod = __import__(modname, globals(), locals(), ['*'], 1) except ImportError: pass else: @@ -128,6 +128,9 @@ Core and builtins Library ------- +- Have the encoding package's search function dynamically import using absolute + import semantics. + - Patch #1647484: Renamed GzipFile's filename attribute to name. - Patch #1517891: Mode 'a' for ZipFile now creates the file if it |