Skip to content

Commit 10d148a

Browse files
authored
Merge pull request ipfs/go-blockservice#25 from ipfs/revert-23-fix/remove-verifcid
Revert "Remove verifcid as it is handled in go-cid" This commit was moved from ipfs/go-blockservice@6f4459a
2 parents 04e8baf + fdca4bf commit 10d148a

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

blockservice/blockservice.go

+30
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
blockstore "github.com/ipfs/go-ipfs-blockstore"
1515
exchange "github.com/ipfs/go-ipfs-exchange-interface"
1616
logging "github.com/ipfs/go-log"
17+
"github.com/ipfs/go-verifcid"
1718
)
1819

1920
var log = logging.Logger("blockservice")
@@ -130,6 +131,11 @@ func NewSession(ctx context.Context, bs BlockService) *Session {
130131
// TODO pass a context into this if the remote.HasBlock is going to remain here.
131132
func (s *blockService) AddBlock(o blocks.Block) error {
132133
c := o.Cid()
134+
// hash security
135+
err := verifcid.ValidateCid(c)
136+
if err != nil {
137+
return err
138+
}
133139
if s.checkFirst {
134140
if has, err := s.blockstore.Has(c); has || err != nil {
135141
return err
@@ -150,6 +156,13 @@ func (s *blockService) AddBlock(o blocks.Block) error {
150156
}
151157

152158
func (s *blockService) AddBlocks(bs []blocks.Block) error {
159+
// hash security
160+
for _, b := range bs {
161+
err := verifcid.ValidateCid(b.Cid())
162+
if err != nil {
163+
return err
164+
}
165+
}
153166
var toput []blocks.Block
154167
if s.checkFirst {
155168
toput = make([]blocks.Block, 0, len(bs))
@@ -198,6 +211,11 @@ func (s *blockService) getExchange() exchange.Fetcher {
198211
}
199212

200213
func getBlock(ctx context.Context, c cid.Cid, bs blockstore.Blockstore, fget func() exchange.Fetcher) (blocks.Block, error) {
214+
err := verifcid.ValidateCid(c) // hash security
215+
if err != nil {
216+
return nil, err
217+
}
218+
201219
block, err := bs.Get(c)
202220
if err == nil {
203221
return block, nil
@@ -241,6 +259,18 @@ func getBlocks(ctx context.Context, ks []cid.Cid, bs blockstore.Blockstore, fget
241259
go func() {
242260
defer close(out)
243261

262+
k := 0
263+
for _, c := range ks {
264+
// hash security
265+
if err := verifcid.ValidateCid(c); err == nil {
266+
ks[k] = c
267+
k++
268+
} else {
269+
log.Errorf("unsafe CID (%s) passed to blockService.GetBlocks: %s", c, err)
270+
}
271+
}
272+
ks = ks[:k]
273+
244274
var misses []cid.Cid
245275
for _, c := range ks {
246276
hit, err := bs.Get(c)

0 commit comments

Comments
 (0)