From ce0f9d1c142dd003e5f1f727f5e9e18dff5ca263 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Fri, 22 Sep 2017 15:35:17 +0200 Subject: [PATCH] feat(c-wrapper): getCBackPtr is now more secure --- src/c-wrapper/internal/c-tools.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/c-wrapper/internal/c-tools.h b/src/c-wrapper/internal/c-tools.h index 26694d757..026080352 100644 --- a/src/c-wrapper/internal/c-tools.h +++ b/src/c-wrapper/internal/c-tools.h @@ -83,6 +83,7 @@ public: // Get c/cpp ptr helpers. // --------------------------------------------------------------------------- + // Get Object. template< typename CppType, typename CType, @@ -103,6 +104,7 @@ public: return reinterpret_cast *>(cObject)->cppPtr; } + // Get ClonableObject. template< typename CppType, typename CType, @@ -123,6 +125,7 @@ public: return reinterpret_cast *>(cObject)->cppPtr; } + // Set Object. template< typename CppType, typename = typename std::enable_if::value, CppType>::type @@ -133,6 +136,7 @@ public: cppObject->setProperty("LinphonePrivate::Wrapper::cBackPtr", cObject); } + // Set ClonableObject. template< typename CppType, typename = typename std::enable_if::value, CppType>::type @@ -148,6 +152,7 @@ public: } } + // Macro helpers. template static T *getCppPtr (const std::shared_ptr &cppObject) { return cppObject.get(); @@ -172,7 +177,10 @@ public: // Get c back ptr helpers. // --------------------------------------------------------------------------- - template + template< + typename CppType, + typename = typename std::enable_if::value, CppType>::type + > static inline typename CppTypeToCType::type *getCBackPtr (const std::shared_ptr &cppObject) { typedef typename CppTypeToCType::type RetType; @@ -186,7 +194,10 @@ public: return reinterpret_cast(value); } - template + template< + typename CppType, + typename = typename std::enable_if::value, CppType>::type + > static inline typename CppTypeToCType::type *getCBackPtr (const CppType *cppObject) { typedef typename CppTypeToCType::type RetType;