diff options
author | John Newbery <john@johnnewbery.com> | 2020-07-14 10:24:43 +0100 |
---|---|---|
committer | John Newbery <john@johnnewbery.com> | 2020-07-14 10:24:43 +0100 |
commit | ca3585a483ca5f6fc4cc54fd1530f89d13e5b7b0 (patch) | |
tree | 5c3a2b75bb283a132cbb8092ca01c929ab92800c /src/net_processing.cpp | |
parent | 07c83ce0399a2811bdd764b0cce347ba3bdbe37c (diff) |
[net/net processing] check banman pointer before dereferencing
Although we currently don't do this, it should be possible to create a
CConnman or PeerLogicValidation without a Banman instance. Therefore
always check that banman exists before dereferencing the pointer.
Also add comments to the m_banman members of CConnman and
PeerLogicValidation to document that these may be nullptr.
Diffstat (limited to 'src/net_processing.cpp')
-rw-r--r-- | src/net_processing.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/net_processing.cpp b/src/net_processing.cpp index ad349cf1a7..a776fdb214 100644 --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -2491,8 +2491,10 @@ void ProcessMessage( if (addr.nTime <= 100000000 || addr.nTime > nNow + 10 * 60) addr.nTime = nNow - 5 * 24 * 60 * 60; pfrom.AddAddressKnown(addr); - if (banman->IsDiscouraged(addr)) continue; // Do not process banned/discouraged addresses beyond remembering we received them - if (banman->IsBanned(addr)) continue; + if (banman && (banman->IsDiscouraged(addr) || banman->IsBanned(addr))) { + // Do not process banned/discouraged addresses beyond remembering we received them + continue; + } bool fReachable = IsReachable(addr); if (addr.nTime > nSince && !pfrom.fGetAddr && vAddr.size() <= 10 && addr.IsRoutable()) { @@ -3346,7 +3348,8 @@ void ProcessMessage( std::vector<CAddress> vAddr = connman->GetAddresses(); FastRandomContext insecure_rand; for (const CAddress &addr : vAddr) { - if (!banman->IsDiscouraged(addr) && !banman->IsBanned(addr)) { + bool banned_or_discouraged = banman && (banman->IsDiscouraged(addr) || banman->IsBanned(addr)); + if (!banned_or_discouraged) { pfrom.PushAddress(addr, insecure_rand); } } |