diff options
| author | Wladimir J. van der Laan <[email protected]> | 2014-01-06 13:36:51 +0100 |
|---|---|---|
| committer | Wladimir J. van der Laan <[email protected]> | 2014-01-06 13:37:12 +0100 |
| commit | 37d30ec3cf51aa332ce95ecf52fdd3e8e3d7228b (patch) | |
| tree | f8002c42fa4062606197564710595654a7be42ba /src/qt/addresstablemodel.cpp | |
| parent | Merge pull request #3401 (diff) | |
| parent | qt: Add missing lock in WalletModel::listCoins (diff) | |
| download | discoin-37d30ec3cf51aa332ce95ecf52fdd3e8e3d7228b.tar.xz discoin-37d30ec3cf51aa332ce95ecf52fdd3e8e3d7228b.zip | |
Merge pull request #3413
d31ad26 qt: Add missing lock in WalletModel::listCoins (Wladimir J. van der Laan)
28352af qt: protect SetAddressBook with cs_wallet lock everywhere (Wladimir J. van der Laan)
aaf8d15 qt: Add missing LOCKs for locked coin functions (Wladimir J. van der Laan)
4757e92 qt: add missing cs_wallet lock in AddressTableModel::setData (Wladimir J. van der Laan)
Diffstat (limited to 'src/qt/addresstablemodel.cpp')
| -rw-r--r-- | src/qt/addresstablemodel.cpp | 37 |
1 files changed, 17 insertions, 20 deletions
diff --git a/src/qt/addresstablemodel.cpp b/src/qt/addresstablemodel.cpp index 5e7d8e617..2987e5fdd 100644 --- a/src/qt/addresstablemodel.cpp +++ b/src/qt/addresstablemodel.cpp @@ -244,33 +244,34 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value, if(role == Qt::EditRole) { - switch(index.column()) + LOCK(wallet->cs_wallet); /* For SetAddressBook / DelAddressBook */ + CTxDestination curAddress = CBitcoinAddress(rec->address.toStdString()).Get(); + if(index.column() == Label) { - case Label: // Do nothing, if old label == new label if(rec->label == value.toString()) { editStatus = NO_CHANGES; return false; } - wallet->SetAddressBook(CBitcoinAddress(rec->address.toStdString()).Get(), value.toString().toStdString(), strPurpose); - break; - case Address: - // Do nothing, if old address == new address - if(CBitcoinAddress(rec->address.toStdString()) == CBitcoinAddress(value.toString().toStdString())) + wallet->SetAddressBook(curAddress, value.toString().toStdString(), strPurpose); + } else if(index.column() == Address) { + CTxDestination newAddress = CBitcoinAddress(value.toString().toStdString()).Get(); + // Refuse to set invalid address, set error status and return false + if(boost::get<CNoDestination>(&newAddress)) { - editStatus = NO_CHANGES; + editStatus = INVALID_ADDRESS; return false; } - // Refuse to set invalid address, set error status and return false - else if(!walletModel->validateAddress(value.toString())) + // Do nothing, if old address == new address + else if(newAddress == curAddress) { - editStatus = INVALID_ADDRESS; + editStatus = NO_CHANGES; return false; } // Check for duplicate addresses to prevent accidental deletion of addresses, if you try // to paste an existing address over another address (with a different label) - else if(wallet->mapAddressBook.count(CBitcoinAddress(value.toString().toStdString()).Get())) + else if(wallet->mapAddressBook.count(newAddress)) { editStatus = DUPLICATE_ADDRESS; return false; @@ -278,15 +279,11 @@ bool AddressTableModel::setData(const QModelIndex &index, const QVariant &value, // Double-check that we're not overwriting a receiving address else if(rec->type == AddressTableEntry::Sending) { - { - LOCK(wallet->cs_wallet); - // Remove old entry - wallet->DelAddressBook(CBitcoinAddress(rec->address.toStdString()).Get()); - // Add new entry with new address - wallet->SetAddressBook(CBitcoinAddress(value.toString().toStdString()).Get(), rec->label.toStdString(), strPurpose); - } + // Remove old entry + wallet->DelAddressBook(curAddress); + // Add new entry with new address + wallet->SetAddressBook(newAddress, rec->label.toStdString(), strPurpose); } - break; } return true; } |