aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWladimir J. van der Laan <laanwj@gmail.com>2011-06-03 10:52:49 +0200
committerWladimir J. van der Laan <laanwj@gmail.com>2011-06-03 13:05:34 +0200
commitdab03e34f5973d27797b7b415558fa75691a3830 (patch)
treeb610ec964801a85562e106ec013700e1f330fb5d
parent44384a4602821216023ee63157ac6e376d1e9e10 (diff)
downloadbitcoin-dab03e34f5973d27797b7b415558fa75691a3830.tar.xz
Make base58 validator explicit
-rw-r--r--gui/include/bitcoinaddressvalidator.h5
-rw-r--r--gui/src/bitcoinaddressvalidator.cpp26
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;
}