From 81ecf66453d489080d735fe558c481a8f9471d1a Mon Sep 17 00:00:00 2001 From: Rok Mandeljc Date: Fri, 12 Feb 2021 22:18:27 +0100 Subject: [PATCH] cliutils: archive_viewer: fix crash when quitting or moving up a level Calling arch.lib.close() when cleaning up the archive when either moving up a level or quitting the archive_viewer application triggers the assert in pyimod02_archive.ArchiveFile.__getattr__. This is because local file object is set only between __enter__ and __exit__ calls, i.e., while in the `with arch.lib:` block. Which also means that there's no need for attempting to close those file handles in the first place, and the error is probably a regression from when the thread-local file objects were introduced. --- PyInstaller/utils/cliutils/archive_viewer.py | 3 --- news/5554.bugfix.rst | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) create mode 100644 news/5554.bugfix.rst diff --git a/PyInstaller/utils/cliutils/archive_viewer.py b/PyInstaller/utils/cliutils/archive_viewer.py index 687d716fe7..07846e2a36 100644 --- a/PyInstaller/utils/cliutils/archive_viewer.py +++ b/PyInstaller/utils/cliutils/archive_viewer.py @@ -65,7 +65,6 @@ def main(name, brief, debug, rec_debug, **unused_options): if cmd == 'U': if len(stack) > 1: arch = stack[-1][1] - arch.lib.close() del stack[-1] name, arch = stack[-1] show(name, arch) @@ -106,8 +105,6 @@ def main(name, brief, debug, rec_debug, **unused_options): def do_cleanup(): global stack, cleanup - for (name, arch) in stack: - arch.lib.close() stack = [] for filename in cleanup: try: diff --git a/news/5554.bugfix.rst b/news/5554.bugfix.rst new file mode 100644 index 0000000000..e787e1993c --- /dev/null +++ b/news/5554.bugfix.rst @@ -0,0 +1,2 @@ +Fix a crash in ``pyi-archive_viewer`` when quitting the application or +moving up a level.