mirror of
https://github.com/python/cpython.git
synced 2026-01-06 15:32:22 +00:00
bpo-41137: Use utf-8 encoding while reading .pdbrc files (GH-21263)
This commit is contained in:
parent
fed2fc4443
commit
58248d9437
5 changed files with 48 additions and 6 deletions
|
|
@ -241,10 +241,14 @@ middle of a quoted string.
|
|||
triple: debugger; configuration; file
|
||||
|
||||
If a file :file:`.pdbrc` exists in the user's home directory or in the current
|
||||
directory, it is read in and executed as if it had been typed at the debugger
|
||||
prompt. This is particularly useful for aliases. If both files exist, the one
|
||||
in the home directory is read first and aliases defined there can be overridden
|
||||
by the local file.
|
||||
directory, it is read with ``'utf-8'`` encoding and executed as if it had been
|
||||
typed at the debugger prompt. This is particularly useful for aliases. If both
|
||||
files exist, the one in the home directory is read first and aliases defined there
|
||||
can be overridden by the local file.
|
||||
|
||||
.. versionchanged:: 3.11
|
||||
:file:`.pdbrc` is now read with ``'utf-8'`` encoding. Previously, it was read
|
||||
with the system locale encoding.
|
||||
|
||||
.. versionchanged:: 3.2
|
||||
:file:`.pdbrc` can now contain commands that continue debugging, such as
|
||||
|
|
|
|||
|
|
@ -151,6 +151,9 @@ Optimizations
|
|||
(Contributed by Ken Jin and Mark Shannon in :issue:`26110`, based on ideas
|
||||
implemented in PyPy.)
|
||||
|
||||
* :file:`.pdbrc` is now read with ``'utf-8'`` encoding.
|
||||
|
||||
|
||||
CPython bytecode changes
|
||||
========================
|
||||
|
||||
|
|
|
|||
|
|
@ -166,12 +166,12 @@ def __init__(self, completekey='tab', stdin=None, stdout=None, skip=None,
|
|||
self.rcLines = []
|
||||
if readrc:
|
||||
try:
|
||||
with open(os.path.expanduser('~/.pdbrc')) as rcFile:
|
||||
with open(os.path.expanduser('~/.pdbrc'), encoding='utf-8') as rcFile:
|
||||
self.rcLines.extend(rcFile)
|
||||
except OSError:
|
||||
pass
|
||||
try:
|
||||
with open(".pdbrc") as rcFile:
|
||||
with open(".pdbrc", encoding='utf-8') as rcFile:
|
||||
self.rcLines.extend(rcFile)
|
||||
except OSError:
|
||||
pass
|
||||
|
|
|
|||
|
|
@ -1627,6 +1627,40 @@ def test_readrc_homedir(self):
|
|||
if save_home is not None:
|
||||
os.environ["HOME"] = save_home
|
||||
|
||||
def test_read_pdbrc_with_ascii_encoding(self):
|
||||
script = textwrap.dedent("""
|
||||
import pdb; pdb.Pdb().set_trace()
|
||||
print('hello')
|
||||
""")
|
||||
save_home = os.environ.pop('HOME', None)
|
||||
try:
|
||||
with os_helper.temp_cwd():
|
||||
with open('.pdbrc', 'w', encoding='utf-8') as f:
|
||||
f.write("Fran\u00E7ais")
|
||||
|
||||
with open('main.py', 'w', encoding='utf-8') as f:
|
||||
f.write(script)
|
||||
|
||||
cmd = [sys.executable, 'main.py']
|
||||
env = {'PYTHONIOENCODING': 'ascii'}
|
||||
if sys.platform == 'win32':
|
||||
env['PYTHONLEGACYWINDOWSSTDIO'] = 'non-empty-string'
|
||||
proc = subprocess.Popen(
|
||||
cmd,
|
||||
stdout=subprocess.PIPE,
|
||||
stdin=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
env={**os.environ, **env}
|
||||
)
|
||||
with proc:
|
||||
stdout, stderr = proc.communicate(b'c\n')
|
||||
self.assertIn(b"UnicodeEncodeError: \'ascii\' codec can\'t encode character "
|
||||
b"\'\\xe7\' in position 21: ordinal not in range(128)", stderr)
|
||||
|
||||
finally:
|
||||
if save_home is not None:
|
||||
os.environ['HOME'] = save_home
|
||||
|
||||
def test_header(self):
|
||||
stdout = StringIO()
|
||||
header = 'Nobody expects... blah, blah, blah'
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
Use utf-8 encoding while reading .pdbrc files. Patch by Srinivas Reddy Thatiparthy
|
||||
Loading…
Add table
Add a link
Reference in a new issue