aprantl created this revision. aprantl added reviewers: kastiglione, JDevlieghere, Michael137. Herald added a project: All. aprantl requested review of this revision.
I received a crash report in DiagnosticManager that was causes by a nullptr diagnostic having been added. The API allows passing in a null unique_ptr, but all the methods are written assuming that all pointers a dereferencable. This patch makes it impossible to add a null diagnostic. rdar://107633615 https://reviews.llvm.org/D148823 Files: lldb/include/lldb/Expression/DiagnosticManager.h lldb/unittests/Expression/DiagnosticManagerTest.cpp Index: lldb/unittests/Expression/DiagnosticManagerTest.cpp =================================================================== --- lldb/unittests/Expression/DiagnosticManagerTest.cpp +++ lldb/unittests/Expression/DiagnosticManagerTest.cpp @@ -75,6 +75,9 @@ TEST(DiagnosticManagerTest, GetStringNoDiags) { DiagnosticManager mgr; EXPECT_EQ("", mgr.GetString()); + std::unique_ptr<Diagnostic> empty; + mgr.AddDiagnostic(std::move(empty)); + EXPECT_EQ("", mgr.GetString()); } TEST(DiagnosticManagerTest, GetStringBasic) { Index: lldb/include/lldb/Expression/DiagnosticManager.h =================================================================== --- lldb/include/lldb/Expression/DiagnosticManager.h +++ lldb/include/lldb/Expression/DiagnosticManager.h @@ -114,7 +114,8 @@ } void AddDiagnostic(std::unique_ptr<Diagnostic> diagnostic) { - m_diagnostics.push_back(std::move(diagnostic)); + if (diagnostic) + m_diagnostics.push_back(std::move(diagnostic)); } size_t Printf(DiagnosticSeverity severity, const char *format, ...)
Index: lldb/unittests/Expression/DiagnosticManagerTest.cpp =================================================================== --- lldb/unittests/Expression/DiagnosticManagerTest.cpp +++ lldb/unittests/Expression/DiagnosticManagerTest.cpp @@ -75,6 +75,9 @@ TEST(DiagnosticManagerTest, GetStringNoDiags) { DiagnosticManager mgr; EXPECT_EQ("", mgr.GetString()); + std::unique_ptr<Diagnostic> empty; + mgr.AddDiagnostic(std::move(empty)); + EXPECT_EQ("", mgr.GetString()); } TEST(DiagnosticManagerTest, GetStringBasic) { Index: lldb/include/lldb/Expression/DiagnosticManager.h =================================================================== --- lldb/include/lldb/Expression/DiagnosticManager.h +++ lldb/include/lldb/Expression/DiagnosticManager.h @@ -114,7 +114,8 @@ } void AddDiagnostic(std::unique_ptr<Diagnostic> diagnostic) { - m_diagnostics.push_back(std::move(diagnostic)); + if (diagnostic) + m_diagnostics.push_back(std::move(diagnostic)); } size_t Printf(DiagnosticSeverity severity, const char *format, ...)
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits