`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.
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;
};
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;
};