From 92ef6db7b735544e644d932d452a451d00fd0aa4 Mon Sep 17 00:00:00 2001 From: Anton Evangelatov Date: Tue, 14 Aug 2018 11:31:24 +0200 Subject: [PATCH] swarm/storage: add chunk size validation to localstore --- swarm/storage/localstore.go | 5 +++-- swarm/storage/types.go | 9 --------- swarm/swarm.go | 1 - 3 files changed, 3 insertions(+), 12 deletions(-) diff --git a/swarm/storage/localstore.go b/swarm/storage/localstore.go index 096d150ae3..bb71d3ba6f 100644 --- a/swarm/storage/localstore.go +++ b/swarm/storage/localstore.go @@ -24,6 +24,7 @@ import ( "sync" "github.com/ethereum/go-ethereum/metrics" + cp "github.com/ethereum/go-ethereum/swarm/chunk" "github.com/ethereum/go-ethereum/swarm/log" "github.com/ethereum/go-ethereum/swarm/storage/mock" ) @@ -98,8 +99,8 @@ func NewTestLocalStoreForAddr(params *LocalStoreParams) (*LocalStore, error) { // After the LDBStore.Put, it is ensured that the MemStore // contains the chunk with the same data, but nil ReqC channel. func (ls *LocalStore) Put(ctx context.Context, chunk *Chunk) { - if l := len(chunk.SData); l < 9 { - log.Debug("incomplete chunk data", "addr", chunk.Addr, "length", l) + if l := len(chunk.SData); l < 9 || l > cp.DefaultSize+8 { + log.Debug("invalid chunk data", "addr", chunk.Addr, "len", l) chunk.SetErrored(ErrChunkInvalid) chunk.markAsStored() return diff --git a/swarm/storage/types.go b/swarm/storage/types.go index 03a0418ee3..3d0cf2caf2 100644 --- a/swarm/storage/types.go +++ b/swarm/storage/types.go @@ -355,12 +355,3 @@ func (v *ContentAddressValidator) Validate(addr Address, data []byte) bool { return bytes.Equal(hash, addr[:]) } - -// SizeValidator provides method for validation of max chunk data size -type SizeValidator struct { -} - -// Validate that the chunk has valid size -func (v *SizeValidator) Validate(_ Address, data []byte) bool { - return len(data) <= 8+chunk.DefaultSize -} diff --git a/swarm/swarm.go b/swarm/swarm.go index 758e815f47..d8b970f6f8 100644 --- a/swarm/swarm.go +++ b/swarm/swarm.go @@ -203,7 +203,6 @@ func NewSwarm(config *api.Config, mockStore *mock.NodeStore) (self *Swarm, err e validators := []storage.ChunkValidator{ storage.NewContentAddressValidator(storage.MakeHashFunc(storage.DefaultHash)), - &storage.SizeValidator{}, } if resourceHandler != nil { validators = append(validators, resourceHandler)