[Lldb-commits] [PATCH] D85396: Fix a small memory leak in VectorType.cpp and BlockPointer.cpp

Jason Molenda via Phabricator via lldb-commits lldb-commits at lists.llvm.org
Wed Aug 5 21:44:39 PDT 2020


jasonmolenda created this revision.
jasonmolenda added reviewers: jingham, davide.
jasonmolenda added a project: LLDB.
Herald added a subscriber: JDevlieghere.
jasonmolenda requested review of this revision.

Looking over the clang static analyzer, came across this old memory leak - looks like it's been around for at least four years.  These two methods both call a formatters::*SyntheticFrontEndCreator method which new's an object and returns a pointer to it; they save save that pointer but never call delete.  This patch puts it in an auto_ptr so it'll be destroyed when it goes out of scope.


Repository:
  rLLDB LLDB

https://reviews.llvm.org/D85396

Files:
  lldb/source/DataFormatters/VectorType.cpp
  lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp


Index: lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp
===================================================================
--- lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp
+++ lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp
@@ -175,9 +175,9 @@
 
 bool lldb_private::formatters::BlockPointerSummaryProvider(
     ValueObject &valobj, Stream &s, const TypeSummaryOptions &) {
-  lldb_private::SyntheticChildrenFrontEnd *synthetic_children =
-      BlockPointerSyntheticFrontEndCreator(nullptr, valobj.GetSP());
-  if (!synthetic_children) {
+    std::auto_ptr<SyntheticChildrenFrontEnd> synthetic_children;
+    synthetic_children.reset(BlockPointerSyntheticFrontEndCreator(nullptr, valobj.GetSP()));
+  if (!synthetic_children.get()) {
     return false;
   }
 
Index: lldb/source/DataFormatters/VectorType.cpp
===================================================================
--- lldb/source/DataFormatters/VectorType.cpp
+++ lldb/source/DataFormatters/VectorType.cpp
@@ -261,9 +261,9 @@
 
 bool lldb_private::formatters::VectorTypeSummaryProvider(
     ValueObject &valobj, Stream &s, const TypeSummaryOptions &) {
-  auto synthetic_children =
-      VectorTypeSyntheticFrontEndCreator(nullptr, valobj.GetSP());
-  if (!synthetic_children)
+  std::auto_ptr<SyntheticChildrenFrontEnd> synthetic_children;
+  synthetic_children.reset(VectorTypeSyntheticFrontEndCreator(nullptr, valobj.GetSP()));
+  if (!synthetic_children.get())
     return false;
 
   synthetic_children->Update();


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D85396.283482.patch
Type: text/x-patch
Size: 1512 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20200806/724ecb52/attachment.bin>


More information about the lldb-commits mailing list