summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2023-04-26 05:28:29 (GMT)
committerGitHub <noreply@github.com>2023-04-26 05:28:29 (GMT)
commitf11ba1c2decd2fa6e9dfe93b9df4b80b46a290be (patch)
tree81568fb32553bcb6cabef8f9940bb7f751bb8882
parentd9aafe249994bc142927a9d92242613ae9d42d13 (diff)
downloadcpython-f11ba1c2decd2fa6e9dfe93b9df4b80b46a290be.zip
cpython-f11ba1c2decd2fa6e9dfe93b9df4b80b46a290be.tar.gz
cpython-f11ba1c2decd2fa6e9dfe93b9df4b80b46a290be.tar.bz2
[3.11] gh-103578: Fix pdb reading code with non-utf8 encoding (GH-103581) (#103867)
`pdb` should use `io.open_code` to open code to avoid encoding issue. (cherry picked from commit 31acfd78a0810f84898d36a8289e407d3754b823) Co-authored-by: Tian Gao <gaogaotiantian@hotmail.com>
-rwxr-xr-xLib/pdb.py2
-rw-r--r--Lib/test/test_pdb.py6
-rw-r--r--Misc/NEWS.d/next/Library/2023-04-16-18-29-04.gh-issue-103578.fly1wc.rst1
3 files changed, 8 insertions, 1 deletions
diff --git a/Lib/pdb.py b/Lib/pdb.py
index 57d070a..f9c5bee 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -154,7 +154,7 @@ class _ScriptTarget(str):
@property
def code(self):
- with io.open(self) as fp:
+ with io.open_code(self) as fp:
return f"exec(compile({fp.read()!r}, {self!r}, 'exec'))"
diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
index 1a0fbf4..9328cca 100644
--- a/Lib/test/test_pdb.py
+++ b/Lib/test/test_pdb.py
@@ -2348,6 +2348,12 @@ def bœr():
# verify that pdb found the source of the "frozen" function
self.assertIn('x = "Sentinel string for gh-93696"', stdout, "Sentinel statement not found")
+ def test_non_utf8_encoding(self):
+ script_dir = os.path.join(os.path.dirname(__file__), 'encoded_modules')
+ for filename in os.listdir(script_dir):
+ if filename.endswith(".py"):
+ self._run_pdb([os.path.join(script_dir, filename)], 'q')
+
class ChecklineTests(unittest.TestCase):
def setUp(self):
linecache.clearcache() # Pdb.checkline() uses linecache.getline()
diff --git a/Misc/NEWS.d/next/Library/2023-04-16-18-29-04.gh-issue-103578.fly1wc.rst b/Misc/NEWS.d/next/Library/2023-04-16-18-29-04.gh-issue-103578.fly1wc.rst
new file mode 100644
index 0000000..69986c2
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-04-16-18-29-04.gh-issue-103578.fly1wc.rst
@@ -0,0 +1 @@
+Fixed a bug where :mod:`pdb` crashes when reading source file with different encoding by replacing :func:`io.open` with :func:`io.open_code`. The new method would also call into the hook set by :func:`PyFile_SetOpenCodeHook`.