Author: Pavel Labath Date: 2021-12-14T17:02:24+01:00 New Revision: ebb6bb725eadd57a0f7995fff17774020f6f0389
URL: https://github.com/llvm/llvm-project/commit/ebb6bb725eadd57a0f7995fff17774020f6f0389 DIFF: https://github.com/llvm/llvm-project/commit/ebb6bb725eadd57a0f7995fff17774020f6f0389.diff LOG: [lldb/python] Plug SBStructuredData leaks This applies the from D114259 to the SBStructuredData class. Added: Modified: lldb/bindings/python/python-swigsafecast.swig lldb/bindings/python/python-wrapper.swig Removed: ################################################################################ diff --git a/lldb/bindings/python/python-swigsafecast.swig b/lldb/bindings/python/python-swigsafecast.swig index fdd3b4e62c102..87abe0b3f1872 100644 --- a/lldb/bindings/python/python-swigsafecast.swig +++ b/lldb/bindings/python/python-swigsafecast.swig @@ -41,11 +41,6 @@ PyObject *SBTypeToSWIGWrapper(lldb::SBTypeSummaryOptions &summary_options_sb) { SWIGTYPE_p_lldb__SBTypeSummaryOptions, 0); } -PyObject *SBTypeToSWIGWrapper(lldb::SBStructuredData &structured_data_sb) { - return SWIG_NewPointerObj(&structured_data_sb, - SWIGTYPE_p_lldb__SBStructuredData, 0); -} - PyObject *SBTypeToSWIGWrapper(lldb::SBSymbolContext &sym_ctx_sb) { return SWIG_NewPointerObj(&sym_ctx_sb, SWIGTYPE_p_lldb__SBSymbolContext, 0); } @@ -86,5 +81,13 @@ PythonObject ToSWIGWrapper(lldb::BreakpointSP breakpoint_sp) { SWIGTYPE_p_lldb__SBBreakpoint); } +PythonObject ToSWIGWrapper(std::unique_ptr<lldb::SBStructuredData> data_sb) { + return ToSWIGHelper(data_sb.release(), SWIGTYPE_p_lldb__SBStructuredData); +} + +PythonObject ToSWIGWrapper(const StructuredDataImpl &data_impl) { + return ToSWIGWrapper(std::make_unique<lldb::SBStructuredData>(data_impl)); +} + } // namespace python } // namespace lldb_private diff --git a/lldb/bindings/python/python-wrapper.swig b/lldb/bindings/python/python-wrapper.swig index da943f73c4351..f1cf8c8e09d7d 100644 --- a/lldb/bindings/python/python-wrapper.swig +++ b/lldb/bindings/python/python-wrapper.swig @@ -52,14 +52,9 @@ lldb_private::LLDBSwigPythonBreakpointCallbackFunction auto result = [&] () -> Expected<PythonObject> { // If the called function doesn't take extra_args, drop them here: - if (max_positional_args < 4) { + if (max_positional_args < 4) return pfunc.Call(frame_arg, bp_loc_arg, dict); - } else { - // FIXME: SBStructuredData leaked here - lldb::SBStructuredData *args_value = new lldb::SBStructuredData(args_impl); - PythonObject args_arg(PyRefType::Owned, SBTypeToSWIGWrapper(*args_value)); - return pfunc.Call(frame_arg, bp_loc_arg, args_arg, dict); - } + return pfunc.Call(frame_arg, bp_loc_arg, ToSWIGWrapper(args_impl), dict); } (); if (!result) @@ -289,11 +284,7 @@ lldb_private::LLDBSwigPythonCreateScriptedProcess PythonObject result = {}; if (arg_info.get().max_positional_args == 2) { - // FIXME: SBStructuredData leaked here - PythonObject args_arg( - PyRefType::Owned, - SBTypeToSWIGWrapper(*new lldb::SBStructuredData(args_impl))); - result = pfunc(target_arg, args_arg); + result = pfunc(target_arg, ToSWIGWrapper(args_impl)); } else { error_string.assign("wrong number of arguments in __init__, should be 2 (not including self)"); Py_RETURN_NONE; @@ -343,11 +334,7 @@ lldb_private::LLDBSwigPythonCreateScriptedThread PythonObject result = {}; if (arg_info.get().max_positional_args == 2) { - // FIXME: SBStructuredData leaked here - PythonObject args_arg( - PyRefType::Owned, - SBTypeToSWIGWrapper(*new lldb::SBStructuredData(args_impl))); - result = pfunc(ToSWIGWrapper(process_sp), args_arg); + result = pfunc(ToSWIGWrapper(process_sp), ToSWIGWrapper(args_impl)); } else { error_string.assign("wrong number of arguments in __init__, should be 2 (not including self)"); Py_RETURN_NONE; @@ -399,8 +386,7 @@ lldb_private::LLDBSwigPythonCreateScriptedThreadPlan } PythonObject result = {}; - // FIXME: SBStructuredData leaked here - auto *args_sb = new lldb::SBStructuredData(args_impl); + auto args_sb = std::make_unique<lldb::SBStructuredData>(args_impl); if (arg_info.get().max_positional_args == 2) { if (args_sb->IsValid()) { error_string.assign("args passed, but __init__ does not take an args dictionary"); @@ -408,8 +394,7 @@ lldb_private::LLDBSwigPythonCreateScriptedThreadPlan } result = pfunc(tp_arg, dict); } else if (arg_info.get().max_positional_args >= 3) { - PythonObject args_arg(PyRefType::Owned, SBTypeToSWIGWrapper(*args_sb)); - result = pfunc(tp_arg, args_arg, dict); + result = pfunc(tp_arg, ToSWIGWrapper(std::move(args_sb)), dict); } else { error_string.assign("wrong number of arguments in __init__, should be 2 or 3 (not including self)"); Py_RETURN_NONE; @@ -486,11 +471,8 @@ void *lldb_private::LLDBSwigPythonCreateScriptedBreakpointResolver( if (!pfunc.IsAllocated()) return nullptr; - // FIXME: SBStructuredData leaked here - lldb::SBStructuredData *args_value = new lldb::SBStructuredData(args_impl); - PythonObject args_arg(PyRefType::Owned, SBTypeToSWIGWrapper(*args_value)); - - PythonObject result = pfunc(ToSWIGWrapper(breakpoint_sp), args_arg, dict); + PythonObject result = + pfunc(ToSWIGWrapper(breakpoint_sp), ToSWIGWrapper(args_impl), dict); // FIXME: At this point we should check that the class we found supports all the methods // that we need. @@ -591,11 +573,8 @@ lldb_private::LLDBSwigPythonCreateScriptedStopHook return nullptr; } - // FIXME: SBStructuredData leaked here - lldb::SBStructuredData *args_value = new lldb::SBStructuredData(args_impl); - PythonObject args_arg(PyRefType::Owned, SBTypeToSWIGWrapper(*args_value)); - - PythonObject result = pfunc(ToSWIGWrapper(target_sp), args_arg, dict); + PythonObject result = + pfunc(ToSWIGWrapper(target_sp), ToSWIGWrapper(args_impl), dict); if (result.IsAllocated()) { _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits