[NOD-1538] Fix bad allocation in notBannedAddressesWithException.

This commit is contained in:
stasatdaglabs 2020-11-15 11:15:27 +02:00 committed by Svarog
parent eef5e3768c
commit f320887bff

View File

@ -141,13 +141,13 @@ func (am *AddressManager) BannedAddresses() []*appmessage.NetAddress {
return result return result
} }
// NotBannedAddressesWithException returns all not banned addresses with excpetion // notBannedAddressesWithException returns all not banned addresses with excpetion
func (am *AddressManager) NotBannedAddressesWithException(exceptions []*appmessage.NetAddress) []*appmessage.NetAddress { func (am *AddressManager) notBannedAddressesWithException(exceptions []*appmessage.NetAddress) []*appmessage.NetAddress {
exceptionsKeys := netAddressesKeys(exceptions) exceptionsKeys := netAddressesKeys(exceptions)
am.mutex.Lock() am.mutex.Lock()
defer am.mutex.Unlock() defer am.mutex.Unlock()
result := make([]*appmessage.NetAddress, 0, len(am.addresses)-len(exceptions)) result := make([]*appmessage.NetAddress, 0, len(am.addresses))
for key, address := range am.addresses { for key, address := range am.addresses {
if !exceptionsKeys[key] { if !exceptionsKeys[key] {
result = append(result, address) result = append(result, address)
@ -159,13 +159,13 @@ func (am *AddressManager) NotBannedAddressesWithException(exceptions []*appmessa
// RandomAddress returns a random address that isn't banned and isn't in exceptions // RandomAddress returns a random address that isn't banned and isn't in exceptions
func (am *AddressManager) RandomAddress(exceptions []*appmessage.NetAddress) *appmessage.NetAddress { func (am *AddressManager) RandomAddress(exceptions []*appmessage.NetAddress) *appmessage.NetAddress {
validAddresses := am.NotBannedAddressesWithException(exceptions) validAddresses := am.notBannedAddressesWithException(exceptions)
return am.random.RandomAddress(validAddresses) return am.random.RandomAddress(validAddresses)
} }
// RandomAddresses returns count addresses at random that aren't banned and aren't in exceptions // RandomAddresses returns count addresses at random that aren't banned and aren't in exceptions
func (am *AddressManager) RandomAddresses(count int, exceptions []*appmessage.NetAddress) []*appmessage.NetAddress { func (am *AddressManager) RandomAddresses(count int, exceptions []*appmessage.NetAddress) []*appmessage.NetAddress {
validAddresses := am.NotBannedAddressesWithException(exceptions) validAddresses := am.notBannedAddressesWithException(exceptions)
return am.random.RandomAddresses(validAddresses, count) return am.random.RandomAddresses(validAddresses, count)
} }