aboutsummaryrefslogtreecommitdiff
path: root/src/libwalletqt
diff options
context:
space:
mode:
authorxiphon <xiphon@protonmail.com>2019-05-28 15:46:26 +0000
committerxiphon <xiphon@protonmail.com>2019-05-28 15:46:26 +0000
commit1cffa8b68d83a77d3e34ecf86b9fd98a2af4a635 (patch)
treed431a861d3541ccb704581e2c4c18d8988f89932 /src/libwalletqt
parentc286c7e5a8e67d769bc9054f661ab742a8b1a5ba (diff)
downloadmonzero-gui-1cffa8b68d83a77d3e34ecf86b9fd98a2af4a635.tar.gz
monzero-gui-1cffa8b68d83a77d3e34ecf86b9fd98a2af4a635.tar.xz
monzero-gui-1cffa8b68d83a77d3e34ecf86b9fd98a2af4a635.zip
WalletManager: fix crash on null/dangling pointer dereference
Diffstat (limited to 'src/libwalletqt')
-rw-r--r--src/libwalletqt/WalletManager.cpp11
-rw-r--r--src/libwalletqt/WalletManager.h2
2 files changed, 10 insertions, 3 deletions
diff --git a/src/libwalletqt/WalletManager.cpp b/src/libwalletqt/WalletManager.cpp
index 141ae97a..494c9575 100644
--- a/src/libwalletqt/WalletManager.cpp
+++ b/src/libwalletqt/WalletManager.cpp
@@ -376,8 +376,14 @@ double WalletManager::miningHashRate() const
bool WalletManager::isMining() const
{
- if(!m_currentWallet->connected())
- return false;
+ {
+ QMutexLocker locker(&m_mutex);
+ if (m_currentWallet == nullptr || !m_currentWallet->connected())
+ {
+ return false;
+ }
+ }
+
return m_pimpl->isMining();
}
@@ -412,6 +418,7 @@ QString WalletManager::resolveOpenAlias(const QString &address) const
}
bool WalletManager::parse_uri(const QString &uri, QString &address, QString &payment_id, uint64_t &amount, QString &tx_description, QString &recipient_name, QVector<QString> &unknown_parameters, QString &error) const
{
+ QMutexLocker locker(&m_mutex);
if (m_currentWallet)
return m_currentWallet->parse_uri(uri, address, payment_id, amount, tx_description, recipient_name, unknown_parameters, error);
return false;
diff --git a/src/libwalletqt/WalletManager.h b/src/libwalletqt/WalletManager.h
index c81fef1c..2e9f9753 100644
--- a/src/libwalletqt/WalletManager.h
+++ b/src/libwalletqt/WalletManager.h
@@ -209,7 +209,7 @@ private:
explicit WalletManager(QObject *parent = 0);
static WalletManager * m_instance;
Monero::WalletManager * m_pimpl;
- QMutex m_mutex;
+ mutable QMutex m_mutex;
QPointer<Wallet> m_currentWallet;
QWaitCondition m_cond_pass;