diff options
| author | Wladimir J. van der Laan <[email protected]> | 2012-05-17 12:10:15 +0200 |
|---|---|---|
| committer | Wladimir J. van der Laan <[email protected]> | 2012-05-21 18:52:15 +0200 |
| commit | 25047eb3e93582b68aad6be7251cf7c4ec962fc8 (patch) | |
| tree | 46d0ac559f53a44ed14753426ba3df1fc6e4997e /src/qt/bitcoinaddressvalidator.cpp | |
| parent | Merge pull request #1354 from fanquake/master (diff) | |
| download | discoin-25047eb3e93582b68aad6be7251cf7c4ec962fc8.tar.xz discoin-25047eb3e93582b68aad6be7251cf7c4ec962fc8.zip | |
Filter out whitespace and zero-width non-breaking spaces in validator
- Fixes issues with copy/pasting from web or html emails (#1325)
Diffstat (limited to 'src/qt/bitcoinaddressvalidator.cpp')
| -rw-r--r-- | src/qt/bitcoinaddressvalidator.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/qt/bitcoinaddressvalidator.cpp b/src/qt/bitcoinaddressvalidator.cpp index 373877808..c804ad0d5 100644 --- a/src/qt/bitcoinaddressvalidator.cpp +++ b/src/qt/bitcoinaddressvalidator.cpp @@ -21,9 +21,12 @@ BitcoinAddressValidator::BitcoinAddressValidator(QObject *parent) : QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) const { // Correction - for(int idx=0; idx<input.size(); ++idx) + for(int idx=0; idx<input.size();) { - switch(input.at(idx).unicode()) + bool removeChar = false; + QChar ch = input.at(idx); + // Transform characters that are visually close + switch(ch.unicode()) { case 'l': case 'I': @@ -33,9 +36,22 @@ QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) co case 'O': input[idx] = QChar('o'); break; + // Qt categorizes these as "Other_Format" not "Separator_Space" + case 0x200B: // ZERO WIDTH SPACE + case 0xFEFF: // ZERO WIDTH NO-BREAK SPACE + removeChar = true; + break; default: break; } + // Remove whitespace + if(ch.isSpace()) + removeChar = true; + // To next character + if(removeChar) + input.remove(idx, 1); + else + ++idx; } // Validation |