From 329c9b1c5dd29c097eb65b09f5ec2bc2fdef5026 Mon Sep 17 00:00:00 2001 From: zelig Date: Sat, 11 Jun 2016 17:10:08 +0100 Subject: [PATCH] swarm/network/kademlia: fix index out of range when deleting last idle peer from kaddb --- swarm/network/kademlia/kaddb.go | 8 ++++---- swarm/storage/memstore.go | 36 --------------------------------- 2 files changed, 4 insertions(+), 40 deletions(-) diff --git a/swarm/network/kademlia/kaddb.go b/swarm/network/kademlia/kaddb.go index 22adb2cbb8..37900a141a 100644 --- a/swarm/network/kademlia/kaddb.go +++ b/swarm/network/kademlia/kaddb.go @@ -247,14 +247,14 @@ func (self *KadDb) delete(row int, indexes ...int) { dbrow := self.Nodes[row] for _, next := range indexes { // need to adjust dbcursor + if next <= self.cursors[row] { + self.cursors[row]-- + } if next > 0 { - if next <= self.cursors[row] { - self.cursors[row]-- - } nodes = append(nodes, dbrow[prev:next]...) } - prev = next + 1 delete(self.index, dbrow[next].Addr) + prev = next + 1 } self.Nodes[row] = append(nodes, dbrow[prev:]...) } diff --git a/swarm/storage/memstore.go b/swarm/storage/memstore.go index f415bdfa59..c5e0f6227f 100644 --- a/swarm/storage/memstore.go +++ b/swarm/storage/memstore.go @@ -3,7 +3,6 @@ package storage import ( - "bytes" "sync" ) @@ -44,41 +43,6 @@ func NewMemStore(d *DbStore, capacity uint) (m *MemStore) { return } -func (x Key) Size() uint { - return uint(len(x)) -} - -func (x Key) isEqual(y Key) bool { - return bytes.Compare(x, y) == 0 -} - -func (h Key) bits(i, j uint) uint { - ii := i >> 3 - jj := i & 7 - if ii >= h.Size() { - return 0 - } - - if jj+j <= 8 { - return uint((h[ii] >> jj) & ((1 << j) - 1)) - } - - res := uint(h[ii] >> jj) - jj = 8 - jj - j -= jj - for j != 0 { - ii++ - if j < 8 { - res += uint(h[ii]&((1<