[Lldb-commits] [lldb] 737820e - Make diagnostics API safer to use

Adrian Prantl via lldb-commits lldb-commits at lists.llvm.org
Fri Apr 21 08:22:03 PDT 2023


Author: Adrian Prantl
Date: 2023-04-21T08:21:56-07:00
New Revision: 737820e6d6e2df50f2ddf522a0db9ffb794ff749

URL: https://github.com/llvm/llvm-project/commit/737820e6d6e2df50f2ddf522a0db9ffb794ff749
DIFF: https://github.com/llvm/llvm-project/commit/737820e6d6e2df50f2ddf522a0db9ffb794ff749.diff

LOG: Make diagnostics API safer to use

I received a crash report in DiagnosticManager that was caused 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

Differential Revision: https://reviews.llvm.org/D148823

Added: 
    

Modified: 
    lldb/include/lldb/Expression/DiagnosticManager.h
    lldb/unittests/Expression/DiagnosticManagerTest.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/include/lldb/Expression/DiagnosticManager.h b/lldb/include/lldb/Expression/DiagnosticManager.h
index c0271c954ba3f..df9ba3b245f51 100644
--- a/lldb/include/lldb/Expression/DiagnosticManager.h
+++ b/lldb/include/lldb/Expression/DiagnosticManager.h
@@ -114,7 +114,8 @@ class DiagnosticManager {
   }
 
   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, ...)

diff  --git a/lldb/unittests/Expression/DiagnosticManagerTest.cpp b/lldb/unittests/Expression/DiagnosticManagerTest.cpp
index 3cfb5ed0b66bb..cab26debedb14 100644
--- a/lldb/unittests/Expression/DiagnosticManagerTest.cpp
+++ b/lldb/unittests/Expression/DiagnosticManagerTest.cpp
@@ -75,6 +75,9 @@ TEST(DiagnosticManagerTest, HasFixits) {
 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) {


        


More information about the lldb-commits mailing list