diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-09-10 16:47:40 +0200 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2014-09-10 16:52:57 +0200 |
commit | d6af9856b0a3140dfa143cd8261efef91f7f3e76 (patch) | |
tree | 7a02fe301e87390d1b2f08fefa6daaa92f0986b4 | |
parent | f23869e14bf7710f05f128544f2778dde28a01b7 (diff) | |
parent | 540ac4514dbe4e077917bad1750768218ef5f9cf (diff) |
Merge pull request #4878
540ac45 Avoid returning many "inv" orphans (Jeff Garzik)
d4168c8 Limit CNode::mapAskFor (Wladimir J. van der Laan)
-rw-r--r-- | src/main.cpp | 5 | ||||
-rw-r--r-- | src/net.cpp | 2 | ||||
-rw-r--r-- | src/net.h | 2 |
3 files changed, 9 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp index bbe5bd87fb..f063a48fe5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3641,6 +3641,11 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, // Track requests for our stuff g_signals.Inventory(inv.hash); + + if (pfrom->nSendSize > (SendBufferSize() * 2)) { + Misbehaving(pfrom->GetId(), 50); + return error("send buffer size() = %u", pfrom->nSendSize); + } } } diff --git a/src/net.cpp b/src/net.cpp index 633a3a34e7..b18944a264 100644 --- a/src/net.cpp +++ b/src/net.cpp @@ -2106,6 +2106,8 @@ CNode::~CNode() void CNode::AskFor(const CInv& inv) { + if (mapAskFor.size() > MAPASKFOR_MAX_SZ) + return; // We're using mapAskFor as a priority queue, // the key is the earliest time the request can be sent int64_t nRequestTime; @@ -51,6 +51,8 @@ static const bool DEFAULT_UPNP = USE_UPNP; #else static const bool DEFAULT_UPNP = false; #endif +/** The maximum number of entries in mapAskFor */ +static const size_t MAPASKFOR_MAX_SZ = MAX_INV_SZ; unsigned int ReceiveFloodSize(); unsigned int SendBufferSize(); |