[Lldb-commits] [lldb] 18bb1f1 - [lldb] Fix a potential bug that may cause assert failure in CommandObject::CheckRequirements
Raphael Isemann via lldb-commits
lldb-commits at lists.llvm.org
Wed May 27 05:05:39 PDT 2020
Author: Raphael Isemann
Date: 2020-05-27T14:05:17+02:00
New Revision: 18bb1f1067028fbeaf92774e640bd865c53e1ce1
URL: https://github.com/llvm/llvm-project/commit/18bb1f1067028fbeaf92774e640bd865c53e1ce1
DIFF: https://github.com/llvm/llvm-project/commit/18bb1f1067028fbeaf92774e640bd865c53e1ce1.diff
LOG: [lldb] Fix a potential bug that may cause assert failure in CommandObject::CheckRequirements
Summary: `CommandObject::CheckRequirements` requires cleaning up `m_exe_ctx`
between commands. Function `HandleOptionCompletion` returns without cleaning up
`m_exe_ctx` could cause assert failure in later `CheckRequirements`.
Reviewers: teemperor, JDevlieghere
Reviewed By: teemperor
Tags: #lldb
Differential Revision: https://reviews.llvm.org/D80447
Added:
Modified:
lldb/source/Interpreter/CommandObject.cpp
Removed:
################################################################################
diff --git a/lldb/source/Interpreter/CommandObject.cpp b/lldb/source/Interpreter/CommandObject.cpp
index f1f17dbd66ef..ddf1f5511ecd 100644
--- a/lldb/source/Interpreter/CommandObject.cpp
+++ b/lldb/source/Interpreter/CommandObject.cpp
@@ -18,6 +18,7 @@
#include "lldb/Core/Address.h"
#include "lldb/Interpreter/Options.h"
#include "lldb/Utility/ArchSpec.h"
+#include "llvm/ADT/ScopeExit.h"
// These are for the Sourcename completers.
// FIXME: Make a separate file for the completers.
@@ -269,6 +270,7 @@ void CommandObject::Cleanup() {
void CommandObject::HandleCompletion(CompletionRequest &request) {
m_exe_ctx = m_interpreter.GetExecutionContext();
+ auto reset_ctx = llvm::make_scope_exit([this]() { Cleanup(); });
// Default implementation of WantsCompletion() is !WantsRawCommandString().
// Subclasses who want raw command string but desire, for example, argument
@@ -296,8 +298,6 @@ void CommandObject::HandleCompletion(CompletionRequest &request) {
// If we got here, the last word is not an option or an option argument.
HandleArgumentCompletion(request, opt_element_vector);
}
-
- m_exe_ctx.Clear();
}
bool CommandObject::HelpTextContainsWord(llvm::StringRef search_word,
More information about the lldb-commits
mailing list