Commit 0ce90358 authored by Esad Akar's avatar Esad Akar Committed by GitHub

fix: pslice variadic add index panic (#1899)

parent f2944470
...@@ -19,7 +19,6 @@ type PSlice struct { ...@@ -19,7 +19,6 @@ type PSlice struct {
peers []swarm.Address // the slice of peers peers []swarm.Address // the slice of peers
bins []uint // the indexes of every proximity order in the peers slice, index is po, value is index of peers slice bins []uint // the indexes of every proximity order in the peers slice, index is po, value is index of peers slice
baseBytes []byte baseBytes []byte
sync.RWMutex sync.RWMutex
} }
...@@ -179,7 +178,7 @@ func (s *PSlice) Add(addrs ...swarm.Address) { ...@@ -179,7 +178,7 @@ func (s *PSlice) Add(addrs ...swarm.Address) {
return return
} }
po := swarm.Proximity(s.baseBytes, addr.Bytes()) po := s.po(addr.Bytes())
peers = insertAddresses(peers, int(s.bins[po]), addr) peers = insertAddresses(peers, int(s.bins[po]), addr)
s.peers = peers s.peers = peers
...@@ -204,10 +203,20 @@ func (s *PSlice) Remove(addr swarm.Address) { ...@@ -204,10 +203,20 @@ func (s *PSlice) Remove(addr swarm.Address) {
peers = append(peers[:i], peers[i+1:]...) peers = append(peers[:i], peers[i+1:]...)
s.peers = peers s.peers = peers
decDeeper(bins, swarm.Proximity(s.baseBytes, addr.Bytes())) decDeeper(bins, s.po(addr.Bytes()))
s.bins = bins s.bins = bins
} }
func (s *PSlice) po(peer []byte) uint8 {
po := swarm.Proximity(s.baseBytes, peer)
if int(po) >= len(s.bins) {
return uint8(len(s.bins)) - 1
}
return po
}
// incDeeper increments the peers slice bin index for proximity order > po for non-empty bins only. // incDeeper increments the peers slice bin index for proximity order > po for non-empty bins only.
// Must be called under lock. // Must be called under lock.
func incDeeper(bins []uint, po uint8) { func incDeeper(bins []uint, po uint8) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment