diff --git a/blockservice.go b/blockservice.go index ba0ab4183041300aef4cfa01cd584a56696407fb..9cf96a8667b9dd5d9d90b29378a8c96eaf4a6803 100644 --- a/blockservice.go +++ b/blockservice.go @@ -273,17 +273,28 @@ func getBlocks(ctx context.Context, ks []cid.Cid, bs blockstore.Blockstore, fget go func() { defer close(out) - k := 0 + allValid := true for _, c := range ks { - // hash security - if err := verifcid.ValidateCid(c); err == nil { - ks[k] = c - k++ - } else { - log.Errorf("unsafe CID (%s) passed to blockService.GetBlocks: %s", c, err) + if err := verifcid.ValidateCid(c); err != nil { + allValid = false + break } } - ks = ks[:k] + + if !allValid { + ks2 := make([]cid.Cid, len(ks)) + k := 0 + for _, c := range ks { + // hash security + if err := verifcid.ValidateCid(c); err == nil { + ks2[k] = c + k++ + } else { + log.Errorf("unsafe CID (%s) passed to blockService.GetBlocks: %s", c, err) + } + } + ks = ks2[:k] + } var misses []cid.Cid for _, c := range ks {