gh-80731: Avoid executing code in except block in cmd (GH-111740)

This commit is contained in:
Tian Gao 2023-11-10 13:13:29 -08:00 committed by GitHub
parent afac3c9b7e
commit 148af38cd0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 43 additions and 3 deletions

View File

@ -210,9 +210,8 @@ class Cmd:
if cmd == '':
return self.default(line)
else:
try:
func = getattr(self, 'do_' + cmd)
except AttributeError:
func = getattr(self, 'do_' + cmd, None)
if func is None:
return self.default(line)
return func(arg)

View File

@ -244,6 +244,21 @@ class TestAlternateInput(unittest.TestCase):
"(Cmd) *** Unknown syntax: EOF\n"))
class CmdPrintExceptionClass(cmd.Cmd):
"""
GH-80731
cmd.Cmd should print the correct exception in default()
>>> mycmd = CmdPrintExceptionClass()
>>> try:
... raise ValueError("test")
... except ValueError:
... mycmd.onecmd("not important")
(<class 'ValueError'>, ValueError('test'))
"""
def default(self, line):
print(sys.exc_info()[:2])
def load_tests(loader, tests, pattern):
tests.addTest(doctest.DocTestSuite())
return tests

View File

@ -2349,6 +2349,31 @@ def test_pdb_issue_gh_108976():
(Pdb) continue
"""
def test_pdb_issue_gh_80731():
"""See GH-80731
pdb should correctly print exception info if in an except block.
>>> with PdbTestInput([ # doctest: +ELLIPSIS
... 'import sys',
... 'sys.exc_info()',
... 'continue'
... ]):
... try:
... raise ValueError('Correct')
... except ValueError:
... import pdb; pdb.Pdb(nosigint=True, readrc=False).set_trace()
... pass
> <doctest test.test_pdb.test_pdb_issue_gh_80731[0]>(10)<module>()
-> pass
(Pdb) import sys
(Pdb) sys.exc_info()
(<class 'ValueError'>, ValueError('Correct'), <traceback object at ...>)
(Pdb) continue
"""
def test_pdb_ambiguous_statements():
"""See GH-104301

View File

@ -0,0 +1 @@
Avoid executing the default function in :class:`cmd.Cmd` in an except block