diff --git a/gdb/python/py-cmd.c b/gdb/python/py-cmd.c index 20a384d6907..d3845fc7509 100644 --- a/gdb/python/py-cmd.c +++ b/gdb/python/py-cmd.c @@ -290,7 +290,7 @@ cmdpy_completer (struct cmd_list_element *command, else if (value >= 0 && value < (long) N_COMPLETERS) completers[value].completer (command, tracker, text, word); } - else + else if (PySequence_Check (resultobj.get ())) { gdbpy_ref<> iter (PyObject_GetIter (resultobj.get ())); diff --git a/gdb/testsuite/gdb.python/py-completion.exp b/gdb/testsuite/gdb.python/py-completion.exp index 23f981e944a..89843c96f1f 100644 --- a/gdb/testsuite/gdb.python/py-completion.exp +++ b/gdb/testsuite/gdb.python/py-completion.exp @@ -46,6 +46,11 @@ if { [readline_is_used] && ![is_remote host] } { # Just discarding whatever we typed. gdb_test " " ".*" "discard #[incr discard]" + # This should offer no suggestions - the complete() methods + # returns something that is neither an integer, or a sequence. + gdb_test_no_output "complete completefilenone ${testdir_complete}" \ + "no suggestions given" + # This is the problematic one. send_gdb "completefilemethod ${testdir_complete}\t" gdb_test_multiple "" "completefilemethod completion" { diff --git a/gdb/testsuite/gdb.python/py-completion.py b/gdb/testsuite/gdb.python/py-completion.py index abec06921c0..61b6beffa25 100644 --- a/gdb/testsuite/gdb.python/py-completion.py +++ b/gdb/testsuite/gdb.python/py-completion.py @@ -28,6 +28,17 @@ class CompleteFileInit(gdb.Command): raise gdb.GdbError("not implemented") +class CompleteFileNone(gdb.Command): + def __init__(self): + gdb.Command.__init__(self, "completefilenone", gdb.COMMAND_USER) + + def invoke(self, argument, from_tty): + raise gdb.GdbError("not implemented") + + def complete(self, text, word): + return None + + class CompleteFileMethod(gdb.Command): def __init__(self): gdb.Command.__init__(self, "completefilemethod", gdb.COMMAND_USER) @@ -203,6 +214,7 @@ class CompleteLimit7(gdb.Command): CompleteFileInit() +CompleteFileNone() CompleteFileMethod() CompleteFileCommandCond() CompleteLimit1()