importlib.test.source.util referenced variables in the 'finally' part of a
try/finally which may not have been set.
diff --git a/Lib/importlib/test/source/util.py b/Lib/importlib/test/source/util.py
index ca04edf..a881d4a 100644
--- a/Lib/importlib/test/source/util.py
+++ b/Lib/importlib/test/source/util.py
@@ -55,6 +55,8 @@
source = 'attr = {0!r}'
created_paths = []
mapping = {}
+ state_manager = None
+ uncache_manager = None
try:
temp_dir = tempfile.gettempdir()
mapping['.root'] = temp_dir
@@ -85,8 +87,10 @@
state_manager.__enter__()
yield mapping
finally:
- state_manager.__exit__(None, None, None)
- uncache_manager.__exit__(None, None, None)
+ if state_manager is not None:
+ state_manager.__exit__(None, None, None)
+ if uncache_manager is not None:
+ uncache_manager.__exit__(None, None, None)
# Reverse the order for path removal to unroll directory creation.
for path in reversed(created_paths):
if file_path.endswith('.py'):
diff --git a/Misc/NEWS b/Misc/NEWS
index 57a188c..f114efb 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -354,6 +354,10 @@
Tests
-----
+- Issue #7248: In importlib.test.source.util a try/finally block did not make
+ sure that some referenced objects actually were created in the block before
+ calling methods on the object.
+
- Issue #7222: Make thread "reaping" more reliable so that reference
leak-chasing test runs give sensible results. The previous method of
reaping threads could return successfully while some Thread objects were