diff options
| author | luigi1111 <luigi1111w@gmail.com> | 2020-02-04 14:36:35 -0500 |
|---|---|---|
| committer | luigi1111 <luigi1111w@gmail.com> | 2020-02-04 14:36:35 -0500 |
| commit | 080ec28eb437042102d4d7362ed81c413c8d85f5 (patch) | |
| tree | e600c496d5bdc3c217993d8591843677a269fb47 /src/model/AddressBookModel.cpp | |
| parent | 8f197bc6ac31912834159088248c201c5128a4ce (diff) | |
| parent | 742a4659f4624efedb3bf6c288db77b4abd66baa (diff) | |
| download | monzero-gui-080ec28eb437042102d4d7362ed81c413c8d85f5.tar.gz monzero-gui-080ec28eb437042102d4d7362ed81c413c8d85f5.tar.xz monzero-gui-080ec28eb437042102d4d7362ed81c413c8d85f5.zip | |
Merge pull request #2758
742a465 AddressBook: thread-safety, fix use-after-free (xiphon)
Diffstat (limited to 'src/model/AddressBookModel.cpp')
| -rw-r--r-- | src/model/AddressBookModel.cpp | 43 |
1 files changed, 20 insertions, 23 deletions
diff --git a/src/model/AddressBookModel.cpp b/src/model/AddressBookModel.cpp index 5c00ad6f..c21fa2f6 100644 --- a/src/model/AddressBookModel.cpp +++ b/src/model/AddressBookModel.cpp @@ -57,30 +57,27 @@ int AddressBookModel::rowCount(const QModelIndex &) const QVariant AddressBookModel::data(const QModelIndex &index, int role) const { - if (!index.isValid()) - return QVariant(); + QVariant result; - if (index.row() < 0 || (unsigned)index.row() >= m_addressBook->count()) { - return QVariant(); - } - - Monero::AddressBookRow * ar = m_addressBook->getRow(index.row()); - - QVariant result = ""; - switch (role) { - case AddressBookAddressRole: - result = QString::fromStdString(ar->getAddress()); - break; - case AddressBookDescriptionRole: - result = QString::fromStdString(ar->getDescription()); - break; - case AddressBookPaymentIdRole: - result = QString::fromStdString(ar->getPaymentId()); - break; - case AddressBookRowIdRole: - // Qt doesnt support size_t overload type casting - result.setValue(ar->getRowId()); - break; + bool found = m_addressBook->getRow(index.row(), [&result, &role](const Monero::AddressBookRow &row) { + switch (role) { + case AddressBookAddressRole: + result = QString::fromStdString(row.getAddress()); + break; + case AddressBookDescriptionRole: + result = QString::fromStdString(row.getDescription()); + break; + case AddressBookPaymentIdRole: + result = QString::fromStdString(row.getPaymentId()); + break; + case AddressBookRowIdRole: + // Qt doesnt support size_t overload type casting + result.setValue(row.getRowId()); + break; + } + }); + if (!found) { + qCritical("%s: internal error: invalid index %d", __FUNCTION__, index.row()); } return result; |
