diff --git a/blockservice.go b/blockservice.go index ba0ab4183041300aef4cfa01cd584a56696407fb..33f69141c615e461ee3e9a97cd95584f4e036efb 100644 --- a/blockservice.go +++ b/blockservice.go @@ -273,17 +273,26 @@ 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, 0, len(ks)) + for _, c := range ks { + // hash security + if err := verifcid.ValidateCid(c); err == nil { + ks2 = append(ks2, c) + } else { + log.Errorf("unsafe CID (%s) passed to blockService.GetBlocks: %s", c, err) + } + } + ks = ks2 + } var misses []cid.Cid for _, c := range ks {