diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2011-06-03 10:52:49 +0200 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2011-06-03 13:05:34 +0200 |
commit | dab03e34f5973d27797b7b415558fa75691a3830 (patch) | |
tree | b610ec964801a85562e106ec013700e1f330fb5d | |
parent | 44384a4602821216023ee63157ac6e376d1e9e10 (diff) | |
download | bitcoin-dab03e34f5973d27797b7b415558fa75691a3830.tar.xz |
Make base58 validator explicit
-rw-r--r-- | gui/include/bitcoinaddressvalidator.h | 5 | ||||
-rw-r--r-- | gui/src/bitcoinaddressvalidator.cpp | 26 |
2 files changed, 26 insertions, 5 deletions
diff --git a/gui/include/bitcoinaddressvalidator.h b/gui/include/bitcoinaddressvalidator.h index c7b2eefc69..73f6ea1f61 100644 --- a/gui/include/bitcoinaddressvalidator.h +++ b/gui/include/bitcoinaddressvalidator.h @@ -3,7 +3,10 @@ #include <QRegExpValidator> -class BitcoinAddressValidator : public QRegExpValidator +/* Base48 entry widget validator. + Corrects near-miss characters and refuses characters that are no part of base48. + */ +class BitcoinAddressValidator : public QValidator { Q_OBJECT public: diff --git a/gui/src/bitcoinaddressvalidator.cpp b/gui/src/bitcoinaddressvalidator.cpp index bccf445757..761a266933 100644 --- a/gui/src/bitcoinaddressvalidator.cpp +++ b/gui/src/bitcoinaddressvalidator.cpp @@ -1,7 +1,5 @@ #include "bitcoinaddressvalidator.h" -#include "base58.h" - #include <QDebug> /* Base58 characters are: @@ -18,12 +16,13 @@ */ BitcoinAddressValidator::BitcoinAddressValidator(QObject *parent) : - QRegExpValidator(QRegExp(QString("^[")+QString(pszBase58)+QString("]+")), parent) + QValidator(parent) { } QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) const { + /* Correction */ for(int idx=0; idx<input.size(); ++idx) { switch(input.at(idx).unicode()) @@ -39,7 +38,26 @@ QValidator::State BitcoinAddressValidator::validate(QString &input, int &pos) co default: break; } + } + + /* Validation */ + QValidator::State state = QValidator::Acceptable; + for(int idx=0; idx<input.size(); ++idx) + { + int ch = input.at(idx).unicode(); + if(((ch >= '0' && ch<='9') || + (ch >= 'a' && ch<='z') || + (ch >= 'A' && ch<='Z')) && + ch != 'l' && ch != 'I' && ch != '0' && ch != 'O') + { + /* Alphanumeric and not a 'forbidden' character */ + } + else + { + state = QValidator::Invalid; + } } - return QRegExpValidator::validate(input, pos); + + return state; } |