diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2012-05-21 09:54:24 -0700 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2012-05-21 09:54:24 -0700 |
commit | bc5053d93e12cbde18573a0c3ef1fbd2857cb566 (patch) | |
tree | 0674dfbb08e00454298e39b239971b5aa7d4952b /src/qt | |
parent | 3b9473afa23fba3cb3970bb268b2c7fcc7b81108 (diff) | |
parent | ce7896070cc0adbf973e1714fba6a729c1df1411 (diff) |
Merge pull request #1329 from laanwj/2012_05_addrremovewhitespace
Filter out whitespace and zero-width non-breaking spaces in address field validator
Diffstat (limited to 'src/qt')
-rw-r--r-- | src/qt/bitcoinaddressvalidator.cpp | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/src/qt/bitcoinaddressvalidator.cpp b/src/qt/bitcoinaddressvalidator.cpp index 373877808f..d2b93e70f5 100644 --- a/src/qt/bitcoinaddressvalidator.cpp +++ b/src/qt/bitcoinaddressvalidator.cpp @@ -21,21 +21,31 @@ 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); + // Corrections made are very conservative on purpose, to avoid + // users unexpectedly getting away with typos that would normally + // be detected, and thus sending to the wrong address. + switch(ch.unicode()) { - case 'l': - case 'I': - input[idx] = QChar('1'); - break; - case '0': - case 'O': - input[idx] = QChar('o'); + // 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 |