Skip to content

Commit bfc833c

Browse files
committed
evo: fast-fail MnNetInfo::AddEntry() if invalid characters found
1 parent dec4874 commit bfc833c

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

src/evo/netinfo.cpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,25 @@ namespace {
1212
static std::unique_ptr<const CChainParams> g_main_params{nullptr};
1313
static const CService empty_service{CService()};
1414

15+
static constexpr std::string_view SAFE_CHARS_IPV4{"1234567890."};
16+
1517
bool IsNodeOnMainnet() { return Params().NetworkIDString() == CBaseChainParams::MAIN; }
1618
const CChainParams& MainParams()
1719
{
1820
// TODO: use real args here
1921
if (!g_main_params) g_main_params = CreateChainParams(ArgsManager{}, CBaseChainParams::MAIN);
2022
return *g_main_params;
2123
}
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+
}
2234
} // anonymous namespace
2335

2436
bool NetInfoEntry::operator==(const NetInfoEntry& rhs) const
@@ -148,8 +160,16 @@ NetInfoStatus MnNetInfo::AddEntry(const std::string& input)
148160
if (!IsEmpty()) {
149161
return NetInfoStatus::MaxLimit;
150162
}
151-
if (auto service = Lookup(input, /*portDefault=*/Params().GetDefaultPort(), /*fAllowLookup=*/false);
152-
service.has_value()) {
163+
164+
std::string addr;
165+
uint16_t port{Params().GetDefaultPort()};
166+
SplitHostPort(input, port, addr);
167+
// Contains invalid characters, unlikely to pass Lookup(), fast-fail
168+
if (!MatchCharsFilter(addr, SAFE_CHARS_IPV4)) {
169+
return NetInfoStatus::BadInput;
170+
}
171+
172+
if (auto service = Lookup(addr, /*portDefault=*/port, /*fAllowLookup=*/false); service.has_value()) {
153173
const auto ret = ValidateService(service.value());
154174
if (ret == NetInfoStatus::Success) {
155175
m_addr = NetInfoEntry{service.value()};

0 commit comments

Comments
 (0)