From d968a638fcbf9030c999cfacd4c9bf0656e779c4 Mon Sep 17 00:00:00 2001 From: Irit Katriel <1055913+iritkatriel@users.noreply.github.com> Date: Sat, 3 Jul 2021 16:33:35 +0100 Subject: bpo-34266: [pdb] handle ValueError from shlex.split() (GH-26656) --- Lib/pdb.py | 6 +++++- Lib/test/test_pdb.py | 15 +++++++++++++++ .../next/Library/2021-06-10-21-53-46.bpo-34266.k3fxnm.rst | 1 + 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Library/2021-06-10-21-53-46.bpo-34266.k3fxnm.rst diff --git a/Lib/pdb.py b/Lib/pdb.py index ff40f7b..1b4ff54 100755 --- a/Lib/pdb.py +++ b/Lib/pdb.py @@ -1026,7 +1026,11 @@ class Pdb(bdb.Bdb, cmd.Cmd): if arg: import shlex argv0 = sys.argv[0:1] - sys.argv = shlex.split(arg) + try: + sys.argv = shlex.split(arg) + except ValueError as e: + self.error('Cannot run %s: %s' % (arg, e)) + return sys.argv[:0] = argv0 # this is caught in the main debugger loop raise Restart diff --git a/Lib/test/test_pdb.py b/Lib/test/test_pdb.py index 0724b66..63afb81 100644 --- a/Lib/test/test_pdb.py +++ b/Lib/test/test_pdb.py @@ -1800,6 +1800,21 @@ def bœr(): '(Pdb) ', ]) + def test_issue34266(self): + '''do_run handles exceptions from parsing its arg''' + def check(bad_arg, msg): + commands = "\n".join([ + f'run {bad_arg}', + 'q', + ]) + stdout, _ = self.run_pdb_script('pass', commands + '\n') + self.assertEqual(stdout.splitlines()[1:], [ + '-> pass', + f'(Pdb) *** Cannot run {bad_arg}: {msg}', + '(Pdb) ', + ]) + check('\\', 'No escaped character') + check('"', 'No closing quotation') def test_issue42384(self): '''When running `python foo.py` sys.path[0] is an absolute path. `python -m pdb foo.py` should behave the same''' diff --git a/Misc/NEWS.d/next/Library/2021-06-10-21-53-46.bpo-34266.k3fxnm.rst b/Misc/NEWS.d/next/Library/2021-06-10-21-53-46.bpo-34266.k3fxnm.rst new file mode 100644 index 0000000..22ef84e --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-06-10-21-53-46.bpo-34266.k3fxnm.rst @@ -0,0 +1 @@ +Handle exceptions from parsing the arg of :mod:`pdb`'s run/restart command. -- cgit v0.12