From eb2f01aee885994a28b3eb28d558f5b7a1c72b5f Mon Sep 17 00:00:00 2001 From: "Daniel A. Nagy" Date: Tue, 11 Oct 2016 17:31:29 +0200 Subject: swarm/storage: Allow EOF at the end of the reader in the chunker. Handle the case when Read returns less than length of target slice --- swarm/storage/chunker.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/swarm/storage/chunker.go b/swarm/storage/chunker.go index b22b4c813..c0f950de5 100644 --- a/swarm/storage/chunker.go +++ b/swarm/storage/chunker.go @@ -178,10 +178,14 @@ func (self *TreeChunker) split(depth int, treeSize int64, key Key, data io.Reade // leaf nodes -> content chunks chunkData := make([]byte, size+8) binary.LittleEndian.PutUint64(chunkData[0:8], uint64(size)) - _, err := data.Read(chunkData[8:]) - if err != nil { - errC <- err - return + var readBytes int64 + for readBytes < size { + n, err := data.Read(chunkData[8+readBytes:]) + readBytes += int64(n) + if err != nil && !(err == io.EOF && readBytes == size) { + errC <- err + return + } } select { case jobC <- &hashJob{key, chunkData, size, parentWg}: @@ -371,7 +375,6 @@ func (self *LazyChunkReader) join(b []byte, off int64, eoff int64, depth int, tr defer parentWg.Done() // return NewDPA(&LocalStore{}) - // chunk.Size = int64(binary.LittleEndian.Uint64(chunk.SData[0:8])) // find appropriate block level -- cgit v1.2.3