aboutsummaryrefslogtreecommitdiff
path: root/src/libwalletqt/SubaddressAccount.cpp
diff options
context:
space:
mode:
authorxiphon <xiphon@protonmail.com>2019-12-17 14:18:54 +0000
committerxiphon <xiphon@protonmail.com>2019-12-17 14:18:54 +0000
commite0ab9aa898fdd813c73ea3c47ffb0f9b5f80e9cf (patch)
tree032a106b64c293feec2acf81c10fa1c4c6e4703a /src/libwalletqt/SubaddressAccount.cpp
parentc9900c05b22d8e4aa847fea4428b432d6cfa47d7 (diff)
downloadmonzero-gui-e0ab9aa898fdd813c73ea3c47ffb0f9b5f80e9cf.tar.gz
monzero-gui-e0ab9aa898fdd813c73ea3c47ffb0f9b5f80e9cf.tar.xz
monzero-gui-e0ab9aa898fdd813c73ea3c47ffb0f9b5f80e9cf.zip
SubaddressAccount: fix use-after-free bug
Diffstat (limited to 'src/libwalletqt/SubaddressAccount.cpp')
-rw-r--r--src/libwalletqt/SubaddressAccount.cpp26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/libwalletqt/SubaddressAccount.cpp b/src/libwalletqt/SubaddressAccount.cpp
index 1d83fcbd..940413a7 100644
--- a/src/libwalletqt/SubaddressAccount.cpp
+++ b/src/libwalletqt/SubaddressAccount.cpp
@@ -36,24 +36,34 @@ SubaddressAccount::SubaddressAccount(Monero::SubaddressAccount *subaddressAccoun
getAll();
}
-QList<Monero::SubaddressAccountRow *> SubaddressAccount::getAll() const
+void SubaddressAccount::getAll() const
{
qDebug(__FUNCTION__);
emit refreshStarted();
- m_rows.clear();
- for (auto &row: m_subaddressAccountImpl->getAll()) {
- m_rows.append(row);
+ {
+ QWriteLocker locker(&m_lock);
+ m_rows.clear();
+ for (auto &row: m_subaddressAccountImpl->getAll()) {
+ m_rows.append(row);
+ }
}
emit refreshFinished();
- return m_rows;
}
-Monero::SubaddressAccountRow * SubaddressAccount::getRow(int index) const
+bool SubaddressAccount::getRow(int index, std::function<void (Monero::SubaddressAccountRow &)> callback) const
{
- return m_rows.at(index);
+ QReadLocker locker(&m_lock);
+
+ if (index < 0 || index >= m_rows.size())
+ {
+ return false;
+ }
+
+ callback(*m_rows.value(index));
+ return true;
}
void SubaddressAccount::addRow(const QString &label) const
@@ -76,5 +86,7 @@ void SubaddressAccount::refresh() const
quint64 SubaddressAccount::count() const
{
+ QReadLocker locker(&m_lock);
+
return m_rows.size();
}