From 62bb7c966df68cb8e9058b04d1a32ab47499f31c Mon Sep 17 00:00:00 2001 From: Jeromy Date: Tue, 22 Nov 2016 12:31:10 -0800 Subject: [PATCH] chekc that size input to newHamtShard is a power of two License: MIT Signed-off-by: Jeromy --- unixfs/hamt/hamt.go | 33 ++++++++++++++++++++++++--------- unixfs/hamt/hamt_stress_test.go | 18 +++++++++++++++--- unixfs/hamt/hamt_test.go | 21 ++++++++++++++------- unixfs/io/dirbuilder.go | 7 ++++++- 4 files changed, 59 insertions(+), 20 deletions(-) diff --git a/unixfs/hamt/hamt.go b/unixfs/hamt/hamt.go index a3b0c24d9..c9d6eb9dc 100644 --- a/unixfs/hamt/hamt.go +++ b/unixfs/hamt/hamt.go @@ -64,23 +64,31 @@ type child interface { Label() string } -func NewHamtShard(dserv dag.DAGService, size int) *HamtShard { - ds := makeHamtShard(dserv, size) +func NewHamtShard(dserv dag.DAGService, size int) (*HamtShard, error) { + ds, err := makeHamtShard(dserv, size) + if err != nil { + return nil, err + } + ds.bitfield = big.NewInt(0) ds.nd = new(dag.ProtoNode) ds.hashFunc = HashMurmur3 - return ds + return ds, nil } -func makeHamtShard(ds dag.DAGService, size int) *HamtShard { +func makeHamtShard(ds dag.DAGService, size int) (*HamtShard, error) { + lg2s := int(math.Log2(float64(size))) + if 1<