aboutsummaryrefslogtreecommitdiff
path: root/src/qt/bitcoinaddressvalidator.cpp
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2012-05-17 12:10:15 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2012-05-21 18:52:15 +0200
commit25047eb3e93582b68aad6be7251cf7c4ec962fc8 (patch)
tree46d0ac559f53a44ed14753426ba3df1fc6e4997e /src/qt/bitcoinaddressvalidator.cpp
parent46784d0826df00d218d25a1e3df419bef36d70ce (diff)
downloadbitcoin-25047eb3e93582b68aad6be7251cf7c4ec962fc8.tar.xz
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.cpp20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/qt/bitcoinaddressvalidator.cpp b/src/qt/bitcoinaddressvalidator.cpp
index 373877808f..c804ad0d57 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