@@ -334,10 +334,10 @@ void CAddrMan::Attempt_(const CService& addr, int64_t nTime)
334334 info.nAttempts ++;
335335}
336336
337- CAddress CAddrMan::Select_ ()
337+ CAddrInfo CAddrMan::Select_ ()
338338{
339339 if (size () == 0 )
340- return CAddress ();
340+ return CAddrInfo ();
341341
342342 // Use a 50% chance for choosing between tried and new table entries.
343343 if (nTried > 0 && (nNew == 0 || GetRandInt (2 ) == 0 )) {
@@ -346,8 +346,10 @@ CAddress CAddrMan::Select_()
346346 while (1 ) {
347347 int nKBucket = GetRandInt (ADDRMAN_TRIED_BUCKET_COUNT);
348348 int nKBucketPos = GetRandInt (ADDRMAN_BUCKET_SIZE);
349- if (vvTried[nKBucket][nKBucketPos] == -1 )
350- continue ;
349+ while (vvTried[nKBucket][nKBucketPos] == -1 ) {
350+ nKBucket = (nKBucket + insecure_rand ()) % ADDRMAN_TRIED_BUCKET_COUNT;
351+ nKBucketPos = (nKBucketPos + insecure_rand ()) % ADDRMAN_BUCKET_SIZE;
352+ }
351353 int nId = vvTried[nKBucket][nKBucketPos];
352354 assert (mapInfo.count (nId) == 1 );
353355 CAddrInfo& info = mapInfo[nId];
@@ -361,8 +363,10 @@ CAddress CAddrMan::Select_()
361363 while (1 ) {
362364 int nUBucket = GetRandInt (ADDRMAN_NEW_BUCKET_COUNT);
363365 int nUBucketPos = GetRandInt (ADDRMAN_BUCKET_SIZE);
364- if (vvNew[nUBucket][nUBucketPos] == -1 )
365- continue ;
366+ while (vvNew[nUBucket][nUBucketPos] == -1 ) {
367+ nUBucket = (nUBucket + insecure_rand ()) % ADDRMAN_NEW_BUCKET_COUNT;
368+ nUBucketPos = (nUBucketPos + insecure_rand ()) % ADDRMAN_BUCKET_SIZE;
369+ }
366370 int nId = vvNew[nUBucket][nUBucketPos];
367371 assert (mapInfo.count (nId) == 1 );
368372 CAddrInfo& info = mapInfo[nId];
0 commit comments