[NFC] Fix leak in command options configuration.
authorJordan Rupprecht <rupprecht@google.com>
Fri, 9 Dec 2022 00:37:43 +0000 (16:37 -0800)
committerJordan Rupprecht <rupprecht@google.com>
Fri, 9 Dec 2022 00:37:43 +0000 (16:37 -0800)
`m_options.Append(new OptionPermissions())` leaks because the pointer passed in is not owned. Use a class member to ensure lifetime, which is the common pattern used for this API.

Found by the LLDB command interpreter fuzzer. The fuzz input is running `ap $` twice.

lldb/source/Commands/CommandObjectPlatform.cpp

index 98c6a3b..d72dd06 100644 (file)
@@ -456,12 +456,13 @@ public:
 
   Options *GetOptions() override {
     if (!m_options.DidFinalize()) {
-      m_options.Append(new OptionPermissions());
+      m_options.Append(&m_option_permissions);
       m_options.Finalize();
     }
     return &m_options;
   }
 
+  OptionPermissions m_option_permissions;
   OptionGroupOptions m_options;
 };
 
@@ -519,12 +520,13 @@ public:
 
   Options *GetOptions() override {
     if (!m_options.DidFinalize()) {
-      m_options.Append(new OptionPermissions());
+      m_options.Append(&m_option_permissions);
       m_options.Finalize();
     }
     return &m_options;
   }
 
+  OptionPermissions m_option_permissions;
   OptionGroupOptions m_options;
 };