diff options
author | saturneric <[email protected]> | 2023-12-03 12:27:47 +0000 |
---|---|---|
committer | saturneric <[email protected]> | 2023-12-03 12:27:47 +0000 |
commit | ae2717c3787a34a2c60d6aeef2d0b8bb8e551a1e (patch) | |
tree | 3e4ca2b2add05bd101efca9741c732506a7da8cc /src/core/function/basic/ChannelObject.h | |
parent | refeactor: reduce codes in pinentry (diff) | |
download | GpgFrontend-ae2717c3787a34a2c60d6aeef2d0b8bb8e551a1e.tar.gz GpgFrontend-ae2717c3787a34a2c60d6aeef2d0b8bb8e551a1e.zip |
feat: improve memory security of function framework
Diffstat (limited to 'src/core/function/basic/ChannelObject.h')
-rw-r--r-- | src/core/function/basic/ChannelObject.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/core/function/basic/ChannelObject.h b/src/core/function/basic/ChannelObject.h index 9d247e6a..7bbd6d94 100644 --- a/src/core/function/basic/ChannelObject.h +++ b/src/core/function/basic/ChannelObject.h @@ -28,6 +28,7 @@ #pragma once +#include "core/function/SecureMemoryAllocator.h" namespace GpgFrontend { static constexpr int kGpgFrontendDefaultChannel = @@ -46,6 +47,12 @@ class GPGFRONTEND_CORE_EXPORT ChannelObject { ChannelObject() noexcept; /** + * @brief Destroy the Channel Object object + * + */ + virtual ~ChannelObject() noexcept; + + /** * @brief Construct a new Channel Object object * * @param channel @@ -77,4 +84,16 @@ class GPGFRONTEND_CORE_EXPORT ChannelObject { int channel_ = kGpgFrontendDefaultChannel; ///< The channel id }; +template <typename Derived> +auto ConvertToChannelObjectPtr( + std::unique_ptr<Derived, SecureObjectDeleter<Derived>> derivedPtr) + -> std::unique_ptr<ChannelObject, SecureObjectDeleter<ChannelObject>> { + static_assert(std::is_base_of_v<ChannelObject, Derived>, + "Derived must be a subclass of ChannelObject"); + + ChannelObject* base_ptr = derivedPtr.release(); + return std::unique_ptr<ChannelObject, SecureObjectDeleter<ChannelObject>>( + base_ptr); +} + } // namespace GpgFrontend
\ No newline at end of file |