MCPcopy Create free account
hub / github.com/ElementsProject/elements / validate

Method validate

src/qt/bitcoinaddressvalidator.cpp:23–81  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

21}
22
23QValidator::State BitcoinAddressEntryValidator::validate(QString &input, int &pos) const
24{
25 Q_UNUSED(pos);
26
27 // Empty address is "intermediate" input
28 if (input.isEmpty())
29 return QValidator::Intermediate;
30
31 // Correction
32 for (int idx = 0; idx < input.size();)
33 {
34 bool removeChar = false;
35 QChar ch = input.at(idx);
36 // Corrections made are very conservative on purpose, to avoid
37 // users unexpectedly getting away with typos that would normally
38 // be detected, and thus sending to the wrong address.
39 switch(ch.unicode())
40 {
41 // Qt categorizes these as "Other_Format" not "Separator_Space"
42 case 0x200B: // ZERO WIDTH SPACE
43 case 0xFEFF: // ZERO WIDTH NO-BREAK SPACE
44 removeChar = true;
45 break;
46 default:
47 break;
48 }
49
50 // Remove whitespace
51 if (ch.isSpace())
52 removeChar = true;
53
54 // To next character
55 if (removeChar)
56 input.remove(idx, 1);
57 else
58 ++idx;
59 }
60
61 // Validation
62 QValidator::State state = QValidator::Acceptable;
63 for (int idx = 0; idx < input.size(); ++idx)
64 {
65 int ch = input.at(idx).unicode();
66
67 if (((ch >= '0' && ch<='9') ||
68 (ch >= 'a' && ch<='z') ||
69 (ch >= 'A' && ch<='Z')) &&
70 ch != 'I' && ch != 'O') // Characters invalid in both Base58 and Bech32
71 {
72 // Alphanumeric and not a 'forbidden' character
73 }
74 else
75 {
76 state = QValidator::Invalid;
77 }
78 }
79
80 return state;

Callers

nothing calls this directly

Calls 3

IsValidDestinationStringFunction · 0.85
sizeMethod · 0.45
removeMethod · 0.45

Tested by

no test coverage detected