Browse Source

Merge pull request #1329 from laanwj/2012_05_addrremovewhitespace

Filter out whitespace and zero-width non-breaking spaces in address field validator
0.8
Wladimir J. van der Laan 12 years ago
parent
commit
bc5053d93e
  1. 28
      src/qt/bitcoinaddressvalidator.cpp

28
src/qt/bitcoinaddressvalidator.cpp

@ -21,21 +21,31 @@ BitcoinAddressValidator::BitcoinAddressValidator(QObject *parent) :
QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) const QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) const
{ {
// Correction // 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': // Qt categorizes these as "Other_Format" not "Separator_Space"
case 'I': case 0x200B: // ZERO WIDTH SPACE
input[idx] = QChar('1'); case 0xFEFF: // ZERO WIDTH NO-BREAK SPACE
break; removeChar = true;
case '0':
case 'O':
input[idx] = QChar('o');
break; break;
default: default:
break; break;
} }
// Remove whitespace
if(ch.isSpace())
removeChar = true;
// To next character
if(removeChar)
input.remove(idx, 1);
else
++idx;
} }
// Validation // Validation

Loading…
Cancel
Save