diff options
-rw-r--r-- | src/lib/prov/pkcs11/p11_module.cpp | 9 | ||||
-rw-r--r-- | src/lib/prov/pkcs11/p11_object.cpp | 11 | ||||
-rw-r--r-- | src/lib/prov/pkcs11/p11_session.cpp | 17 |
3 files changed, 29 insertions, 8 deletions
diff --git a/src/lib/prov/pkcs11/p11_module.cpp b/src/lib/prov/pkcs11/p11_module.cpp index 4ea3dc56d..ba8b659b9 100644 --- a/src/lib/prov/pkcs11/p11_module.cpp +++ b/src/lib/prov/pkcs11/p11_module.cpp @@ -20,7 +20,14 @@ Module::Module(const std::string& file_path, C_InitializeArgs init_args) Module::~Module() BOTAN_NOEXCEPT { - m_low_level->C_Finalize(nullptr, nullptr); + try + { + m_low_level->C_Finalize(nullptr, nullptr); + } + catch(...) + { + // we are noexcept and must swallow any exception here + } } void Module::reload(C_InitializeArgs init_args) diff --git a/src/lib/prov/pkcs11/p11_object.cpp b/src/lib/prov/pkcs11/p11_object.cpp index 872fdf8b7..5f078fd31 100644 --- a/src/lib/prov/pkcs11/p11_object.cpp +++ b/src/lib/prov/pkcs11/p11_object.cpp @@ -92,9 +92,16 @@ ObjectFinder::ObjectFinder(Session& session, const std::vector<Attribute>& searc ObjectFinder::~ObjectFinder() BOTAN_NOEXCEPT { - if(m_search_terminated == false) + try { - module()->C_FindObjectsFinal(m_session.get().handle(), nullptr); + if(m_search_terminated == false) + { + module()->C_FindObjectsFinal(m_session.get().handle(), nullptr); + } + } + catch(...) + { + // ignore error during noexcept function } } diff --git a/src/lib/prov/pkcs11/p11_session.cpp b/src/lib/prov/pkcs11/p11_session.cpp index ceb316169..71397eea5 100644 --- a/src/lib/prov/pkcs11/p11_session.cpp +++ b/src/lib/prov/pkcs11/p11_session.cpp @@ -38,14 +38,21 @@ Session::Session(Slot& slot, SessionHandle handle) Session::~Session() BOTAN_NOEXCEPT { - if(m_handle) + try { - if(m_logged_in) + if(m_handle) { - module()->C_Logout(m_handle, nullptr); + if(m_logged_in) + { + module()->C_Logout(m_handle, nullptr); + } + module()->C_CloseSession(m_handle, nullptr); + m_handle = 0; } - module()->C_CloseSession(m_handle, nullptr); - m_handle = 0; + } + catch(...) + { + // exception during noexcept destructor is ignored } } |