diff options
author | Riccardo Spagni <ric@spagni.net> | 2018-12-04 17:07:51 +0200 |
---|---|---|
committer | Riccardo Spagni <ric@spagni.net> | 2018-12-04 17:07:51 +0200 |
commit | 398f7076bb67d749d76a1b275e5bd771e9714b4b (patch) | |
tree | 792b06ae57ec00c1b5d704655a7d81cf7fbe7064 | |
parent | Merge pull request #4850 (diff) | |
parent | various: do not propagate exception through dtor (diff) | |
download | monero-398f7076bb67d749d76a1b275e5bd771e9714b4b.tar.xz |
Merge pull request #4853
2b3595d0 various: do not propagate exception through dtor (moneromooo-monero)
-rw-r--r-- | contrib/epee/include/mlocker.h | 2 | ||||
-rw-r--r-- | contrib/epee/src/mlocker.cpp | 3 | ||||
-rw-r--r-- | src/common/http_connection.h | 3 | ||||
-rw-r--r-- | src/wallet/wallet2.cpp | 7 |
4 files changed, 11 insertions, 4 deletions
diff --git a/contrib/epee/include/mlocker.h b/contrib/epee/include/mlocker.h index d2fc2ed58..a6d94b3d2 100644 --- a/contrib/epee/include/mlocker.h +++ b/contrib/epee/include/mlocker.h @@ -73,7 +73,7 @@ namespace epee mlocked(const T &&t): T(t) { mlocker::lock(this, sizeof(T)); } mlocked(const mlocked<T> &&mt): T(mt) { mlocker::lock(this, sizeof(T)); } mlocked<T> &operator=(const mlocked<T> &mt) { T::operator=(mt); return *this; } - ~mlocked() { mlocker::unlock(this, sizeof(T)); } + ~mlocked() { try { mlocker::unlock(this, sizeof(T)); } catch (...) { /* do not propagate */ } } }; template<typename T> diff --git a/contrib/epee/src/mlocker.cpp b/contrib/epee/src/mlocker.cpp index c3262e8f4..09ef861ac 100644 --- a/contrib/epee/src/mlocker.cpp +++ b/contrib/epee/src/mlocker.cpp @@ -108,7 +108,8 @@ namespace epee mlocker::~mlocker() { - unlock(ptr, len); + try { unlock(ptr, len); } + catch (...) { /* ignore and do not propagate through the dtor */ } } void mlocker::lock(void *ptr, size_t len) diff --git a/src/common/http_connection.h b/src/common/http_connection.h index 9fc6be261..554dd832b 100644 --- a/src/common/http_connection.h +++ b/src/common/http_connection.h @@ -55,7 +55,8 @@ public: { if (m_ok) { - mp_http_client->disconnect(); + try { mp_http_client->disconnect(); } + catch (...) { /* do not propagate through dtor */ } } } diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp index f21b074b6..498addad5 100644 --- a/src/wallet/wallet2.cpp +++ b/src/wallet/wallet2.cpp @@ -830,7 +830,12 @@ wallet_keys_unlocker::~wallet_keys_unlocker() { if (!locked) return; - w.encrypt_keys(key); + try { w.encrypt_keys(key); } + catch (...) + { + MERROR("Failed to re-encrypt wallet keys"); + // do not propagate through dtor, we'd crash + } } wallet2::wallet2(network_type nettype, uint64_t kdf_rounds, bool unattended): |