changeset: 73601:f7dd5178f36a branch: 2.7 parent: 73585:2a3b60d28f6c user: Jason R. Coombs date: Thu Nov 17 18:03:24 2011 -0500 files: Lib/pdb.py Lib/test/test_pdb.py description: PDB now will properly escape backslashes in the names of modules it executes. Fixes #7750 diff -r 2a3b60d28f6c -r f7dd5178f36a Lib/pdb.py --- a/Lib/pdb.py Wed Nov 16 06:01:14 2011 +0200 +++ b/Lib/pdb.py Thu Nov 17 18:03:24 2011 -0500 @@ -1229,7 +1229,7 @@ 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 -r 2a3b60d28f6c -r f7dd5178f36a Lib/test/test_pdb.py --- a/Lib/test/test_pdb.py Wed Nov 16 06:01:14 2011 +0200 +++ b/Lib/test/test_pdb.py Thu Nov 17 18:03:24 2011 -0500 @@ -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 @@ 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 @@ if __name__ == '__main__': test_main() + unittest.main()