File tree 1 file changed +17
-1
lines changed
1 file changed +17
-1
lines changed Original file line number Diff line number Diff line change @@ -12,13 +12,25 @@ namespace {
12
12
static std::unique_ptr<const CChainParams> g_main_params{nullptr };
13
13
static const CService empty_service{CService ()};
14
14
15
- bool IsNodeOnMainnet () { return Params ().NetworkIDString () == CBaseChainParams::MAIN; }
15
+ static constexpr std::string_view SAFE_CHARS_IPPORT{" 1234567890.[]:" };
16
+
17
+ const bool IsNodeOnMainnet () { return Params ().NetworkIDString () == CBaseChainParams::MAIN; }
16
18
const CChainParams& MainParams ()
17
19
{
18
20
// TODO: use real args here
19
21
if (!g_main_params) g_main_params = CreateChainParams (ArgsManager{}, CBaseChainParams::MAIN);
20
22
return *g_main_params;
21
23
}
24
+
25
+ bool MatchCharsFilter (const std::string& input, const std::string_view& filter)
26
+ {
27
+ for (char c : input) {
28
+ if (filter.find (c) == std::string::npos) {
29
+ return false ;
30
+ }
31
+ }
32
+ return true ;
33
+ }
22
34
} // anonymous namespace
23
35
24
36
bool NetInfoEntry::operator ==(const NetInfoEntry& rhs) const
@@ -148,6 +160,10 @@ NetInfoStatus MnNetInfo::AddEntry(const std::string& input)
148
160
if (!IsEmpty ()) {
149
161
return NetInfoStatus::MaxLimit;
150
162
}
163
+ // Contains invalid characters, unlikely to pass Lookup(), fast-fail
164
+ if (!MatchCharsFilter (input, SAFE_CHARS_IPPORT)) {
165
+ return NetInfoStatus::BadInput;
166
+ }
151
167
if (auto service = Lookup (input, /* portDefault=*/ Params ().GetDefaultPort (), /* fAllowLookup=*/ false );
152
168
service.has_value ()) {
153
169
const auto ret = ValidateService (service.value ());
You can’t perform that action at this time.
0 commit comments