From 27a9e574ef5ccb4d0f264504de14172c76711a1a Mon Sep 17 00:00:00 2001 From: Sergey Linev <S.Linev@gsi.de> Date: Thu, 25 Mar 2021 15:44:51 +0100 Subject: [PATCH] [cppyy] fix potential double-deletion in CPPMethod #7692 After use of asign operator some fields can be destroyed twice --- bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.cxx | 7 ++++++- bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.h | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.cxx b/bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.cxx index a1c0e94f6dc..c05ec97bded 100644 --- a/bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.cxx +++ b/bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.cxx @@ -45,7 +45,7 @@ inline void CPyCppyy::CPPMethod::Copy_(const CPPMethod& /* other */) } //---------------------------------------------------------------------------- -inline void CPyCppyy::CPPMethod::Destroy_() const +inline void CPyCppyy::CPPMethod::Destroy_() { // destroy executor and argument converters if (fExecutor && fExecutor->HasState()) delete fExecutor; @@ -55,6 +55,11 @@ inline void CPyCppyy::CPPMethod::Destroy_() const } delete fArgIndices; + + fExecutor = nullptr; + fArgIndices = nullptr; + fConverters.clear(); + fArgsRequired = -1; } //---------------------------------------------------------------------------- diff --git a/bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.h b/bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.h index d29eae27b30..ddd8aa113dd 100644 --- a/bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.h +++ b/bindings/pyroot/cppyy/CPyCppyy/src/CPPMethod.h @@ -61,7 +61,7 @@ protected: private: void Copy_(const CPPMethod&); - void Destroy_() const; + void Destroy_(); PyObject* ExecuteFast(void*, ptrdiff_t, CallContext*); PyObject* ExecuteProtected(void*, ptrdiff_t, CallContext*); -- GitLab