Commit 9ae3f7a1 authored by Martin v. Löwis's avatar Martin v. Löwis

Issue #13532: Check that arguments to sys.stdout.write are strings.

parent 44dea9d0
What's New in IDLE 3.2.4?
=========================
- Issue #13532: Check that arguments to sys.stdout.write are strings.
- Issue # 12510: Attempt to get certain tool tips no longer crashes IDLE.
Erroneous tool tips have been corrected. Default added for callables.
......
......@@ -1242,6 +1242,8 @@ class PseudoFile(object):
self.encoding = encoding
def write(self, s):
if not isinstance(s, str):
raise TypeError('must be str, not ' + type(s).__name__)
self.shell.write(s, self.tags)
def writelines(self, lines):
......
import sys
import io
import linecache
import time
import socket
......@@ -244,6 +245,23 @@ class MyRPCServer(rpc.RPCServer):
quitting = True
thread.interrupt_main()
class _RPCFile(io.TextIOBase):
"""Wrapper class for the RPC proxy to typecheck arguments
that may not support pickling."""
def __init__(self, rpc):
super.__setattr__(self, 'rpc', rpc)
def __getattr__(self, name):
return getattr(self.rpc, name)
def __setattr__(self, name, value):
return setattr(self.rpc, name, value)
def write(self, s):
if not isinstance(s, str):
raise TypeError('must be str, not ' + type(s).__name__)
return self.rpc.write(s)
class MyHandler(rpc.RPCHandler):
......@@ -251,9 +269,9 @@ class MyHandler(rpc.RPCHandler):
"""Override base method"""
executive = Executive(self)
self.register("exec", executive)
sys.stdin = self.console = self.get_remote_proxy("stdin")
sys.stdout = self.get_remote_proxy("stdout")
sys.stderr = self.get_remote_proxy("stderr")
sys.stdin = self.console = _RPCFile(self.get_remote_proxy("stdin"))
sys.stdout = _RPCFile(self.get_remote_proxy("stdout"))
sys.stderr = _RPCFile(self.get_remote_proxy("stderr"))
# page help() text to shell.
import pydoc # import must be done here to capture i/o binding
pydoc.pager = pydoc.plainpager
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment