summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2011-11-17 23:03:24 (GMT)
committerJason R. Coombs <jaraco@jaraco.com>2011-11-17 23:03:24 (GMT)
commit5d032c0f95d4794edcf38253aa54a0e970e5249b (patch)
tree33da0912cd0af41ffbf1b3b0571809c7cf8453dc
parent9efddb654ba95d4f8b333d814334099a44d2ccd0 (diff)
downloadcpython-5d032c0f95d4794edcf38253aa54a0e970e5249b.zip
cpython-5d032c0f95d4794edcf38253aa54a0e970e5249b.tar.gz
cpython-5d032c0f95d4794edcf38253aa54a0e970e5249b.tar.bz2
PDB now will properly escape backslashes in the names of modules it executes. Fixes #7750
-rwxr-xr-xLib/pdb.py2
-rw-r--r--Lib/test/test_pdb.py27
2 files changed, 28 insertions, 1 deletions
diff --git a/Lib/pdb.py b/Lib/pdb.py
index a6109d4..5468d3f 100755
--- a/Lib/pdb.py
+++ b/Lib/pdb.py
@@ -1229,7 +1229,7 @@ see no sign that the breakpoint was reached.
self._wait_for_mainpyfile = 1
self.mainpyfile = self.canonic(filename)
self._user_requested_quit = 0
- statement = 'execfile( "%s")' % filename
+ statement = 'execfile(%r)' % filename
self.run(statement)
# Simplified interface
diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py
index f03c20b..5b1f8f7 100644
--- a/Lib/test/test_pdb.py
+++ b/Lib/test/test_pdb.py
@@ -3,6 +3,9 @@
import imp
import sys
+import os
+import unittest
+import subprocess
from test import test_support
# This little helper class is essential for testing pdb under doctest.
@@ -277,6 +280,29 @@ def test_pdb_continue_in_bottomframe():
4
"""
+class Tester7750(unittest.TestCase):
+ # if the filename has something that resolves to a python
+ # escape character (such as \t), it will fail
+ test_fn = '.\\test7750.py'
+
+ msg = "issue7750 only applies when os.sep is a backslash"
+ @unittest.skipUnless(os.path.sep == '\\', msg)
+ def test_issue7750(self):
+ with open(self.test_fn, 'w') as f:
+ f.write('print("hello world")')
+ cmd = [sys.executable, '-m', 'pdb', self.test_fn,]
+ proc = subprocess.Popen(cmd,
+ stdout=subprocess.PIPE,
+ stdin=subprocess.PIPE,
+ stderr=subprocess.STDOUT,
+ )
+ stdout, stderr = proc.communicate('quit\n')
+ self.assertNotIn('IOError', stdout, "pdb munged the filename")
+
+ def tearDown(self):
+ if os.path.isfile(self.test_fn):
+ os.remove(self.test_fn)
+
def test_main():
from test import test_pdb
@@ -285,3 +311,4 @@ def test_main():
if __name__ == '__main__':
test_main()
+ unittest.main()