]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-78889: Stop IDLE Shell freezes from sys.stdout.shell.xyz (#121876)
authorTerry Jan Reedy <tjreedy@udel.edu>
Wed, 17 Jul 2024 13:33:33 +0000 (09:33 -0400)
committerGitHub <noreply@github.com>
Wed, 17 Jul 2024 13:33:33 +0000 (09:33 -0400)
Problem occurred when attribute xyz could not be pickled.
Since this is not trivial to selectively fix, block all
attributes (other than 'width').  IDLE does not access them
and they are private implementation details.

Lib/idlelib/News3.txt
Lib/idlelib/run.py
Misc/NEWS.d/next/IDLE/2024-07-16-16-57-03.gh-issue-78889.U7ghFD.rst [new file with mode: 0644]

index b1b652dc562c8eebeaca74e490dff52d01353b85..68702ac8fb91572922b2f3b58e7df480dc367bfa 100644 (file)
@@ -4,6 +4,9 @@ Released on 2024-10-xx
 =========================
 
 
+gh-78889: Stop Shell freezes by blocking user access to non-method
+sys.stdout.shell attributes, which are all private.
+
 gh-78955: Use user-selected color theme for Help => IDLE Doc.
 
 gh-96905: In idlelib code, stop redefining built-ins 'dict' and 'object'.
index 8974b52674fb8c8ea0d2f3280fbb240b34fdbd24..8f98e73258e778bcfe0e0d2663f677936fc82338 100644 (file)
@@ -443,6 +443,9 @@ class StdioFile(io.TextIOBase):
 
     def __init__(self, shell, tags, encoding='utf-8', errors='strict'):
         self.shell = shell
+        # GH-78889: accessing unpickleable attributes freezes Shell.
+        # IDLE only needs methods; allow 'width' for possible use.
+        self.shell._RPCProxy__attributes = {'width': 1}
         self.tags = tags
         self._encoding = encoding
         self._errors = errors
diff --git a/Misc/NEWS.d/next/IDLE/2024-07-16-16-57-03.gh-issue-78889.U7ghFD.rst b/Misc/NEWS.d/next/IDLE/2024-07-16-16-57-03.gh-issue-78889.U7ghFD.rst
new file mode 100644 (file)
index 0000000..604194e
--- /dev/null
@@ -0,0 +1,2 @@
+Stop Shell freezes by blocking user access to non-method sys.stdout.shell attributes,
+which are all private.