Skip to content

Commit df46de2

Browse files
authored
Merge pull request #2453 from Pythonix/addrman-fix
net: Do not propagate obviously poor addresses onto the network
2 parents 232d6ef + 1cec406 commit df46de2

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

src/addrman.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -491,17 +491,23 @@ int CAddrMan::Check_()
491491

492492
void CAddrMan::GetAddr_(std::vector<CAddress> &vAddr)
493493
{
494-
int nNodes = ADDRMAN_GETADDR_MAX_PCT*vRandom.size()/100;
494+
unsigned int nNodes = ADDRMAN_GETADDR_MAX_PCT * vRandom.size() / 100;
495495
if (nNodes > ADDRMAN_GETADDR_MAX)
496496
nNodes = ADDRMAN_GETADDR_MAX;
497497

498-
// perform a random shuffle over the first nNodes elements of vRandom (selecting from all)
499-
for (int n = 0; n<nNodes; n++)
498+
// gather a list of random nodes, skipping those of low quality
499+
for (unsigned int n = 0; n < vRandom.size(); n++)
500500
{
501+
if (vAddr.size() >= nNodes)
502+
break;
503+
501504
int nRndPos = GetRandInt(vRandom.size() - n) + n;
502505
SwapRandom(n, nRndPos);
503506
assert(mapInfo.count(vRandom[n]) == 1);
504-
vAddr.push_back(mapInfo[vRandom[n]]);
507+
508+
const CAddrInfo& ai = mapInfo[vRandom[n]];
509+
if(!ai.IsTerrible())
510+
vAddr.push_back(ai);
505511
}
506512
}
507513

0 commit comments

Comments
 (0)