Merge pull request #4878

540ac45 Avoid returning many "inv" orphans (Jeff Garzik)
d4168c8 Limit CNode::mapAskFor (Wladimir J. van der Laan)
This commit is contained in:
Wladimir J. van der Laan 2014-09-10 16:47:40 +02:00
commit d6af9856b0
No known key found for this signature in database
GPG Key ID: 74810B012346C9A6
3 changed files with 9 additions and 0 deletions

View File

@ -3641,6 +3641,11 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
// Track requests for our stuff // Track requests for our stuff
g_signals.Inventory(inv.hash); g_signals.Inventory(inv.hash);
if (pfrom->nSendSize > (SendBufferSize() * 2)) {
Misbehaving(pfrom->GetId(), 50);
return error("send buffer size() = %u", pfrom->nSendSize);
}
} }
} }

View File

@ -2106,6 +2106,8 @@ CNode::~CNode()
void CNode::AskFor(const CInv& inv) void CNode::AskFor(const CInv& inv)
{ {
if (mapAskFor.size() > MAPASKFOR_MAX_SZ)
return;
// We're using mapAskFor as a priority queue, // We're using mapAskFor as a priority queue,
// the key is the earliest time the request can be sent // the key is the earliest time the request can be sent
int64_t nRequestTime; int64_t nRequestTime;

View File

@ -51,6 +51,8 @@ static const bool DEFAULT_UPNP = USE_UPNP;
#else #else
static const bool DEFAULT_UPNP = false; static const bool DEFAULT_UPNP = false;
#endif #endif
/** The maximum number of entries in mapAskFor */
static const size_t MAPASKFOR_MAX_SZ = MAX_INV_SZ;
unsigned int ReceiveFloodSize(); unsigned int ReceiveFloodSize();
unsigned int SendBufferSize(); unsigned int SendBufferSize();