This revision was automatically updated to reflect the committed changes. Closed by commit rGfb10b01cca85: [lldb] Prevent crash when completing ambiguous subcommands (authored by JDevlieghere). Herald added a project: LLDB.
Changed prior to commit: https://reviews.llvm.org/D154643?vs=537829&id=538837#toc Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D154643/new/ https://reviews.llvm.org/D154643 Files: lldb/source/Commands/CommandObjectMultiword.cpp lldb/test/API/functionalities/completion/TestCompletion.py Index: lldb/test/API/functionalities/completion/TestCompletion.py =================================================================== --- lldb/test/API/functionalities/completion/TestCompletion.py +++ lldb/test/API/functionalities/completion/TestCompletion.py @@ -880,3 +880,11 @@ self.complete_from_to("breakpoint set -N n", "breakpoint set -N n") self.assertTrue(bp1.AddNameWithErrorHandling("nn")) self.complete_from_to("breakpoint set -N ", "breakpoint set -N nn") + + def test_ambiguous_command(self): + """Test completing an ambiguous commands""" + self.complete_from_to("settings s", ['set', 'show']) + + def test_ambiguous_subcommand(self): + """Test completing a subcommand of an ambiguous command""" + self.complete_from_to("settings s ta", []) Index: lldb/source/Commands/CommandObjectMultiword.cpp =================================================================== --- lldb/source/Commands/CommandObjectMultiword.cpp +++ lldb/source/Commands/CommandObjectMultiword.cpp @@ -274,10 +274,10 @@ StringList new_matches; CommandObject *sub_command_object = GetSubcommandObject(arg0, &new_matches); - if (sub_command_object == nullptr) { - request.AddCompletions(new_matches); + + // The subcommand is ambiguous. The completion isn't meaningful. + if (!sub_command_object) return; - } // Remove the one match that we got from calling GetSubcommandObject. new_matches.DeleteStringAtIndex(0);
Index: lldb/test/API/functionalities/completion/TestCompletion.py =================================================================== --- lldb/test/API/functionalities/completion/TestCompletion.py +++ lldb/test/API/functionalities/completion/TestCompletion.py @@ -880,3 +880,11 @@ self.complete_from_to("breakpoint set -N n", "breakpoint set -N n") self.assertTrue(bp1.AddNameWithErrorHandling("nn")) self.complete_from_to("breakpoint set -N ", "breakpoint set -N nn") + + def test_ambiguous_command(self): + """Test completing an ambiguous commands""" + self.complete_from_to("settings s", ['set', 'show']) + + def test_ambiguous_subcommand(self): + """Test completing a subcommand of an ambiguous command""" + self.complete_from_to("settings s ta", []) Index: lldb/source/Commands/CommandObjectMultiword.cpp =================================================================== --- lldb/source/Commands/CommandObjectMultiword.cpp +++ lldb/source/Commands/CommandObjectMultiword.cpp @@ -274,10 +274,10 @@ StringList new_matches; CommandObject *sub_command_object = GetSubcommandObject(arg0, &new_matches); - if (sub_command_object == nullptr) { - request.AddCompletions(new_matches); + + // The subcommand is ambiguous. The completion isn't meaningful. + if (!sub_command_object) return; - } // Remove the one match that we got from calling GetSubcommandObject. new_matches.DeleteStringAtIndex(0);
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits