diff options
author | Daniel A. Nagy <nagy.da@gmail.com> | 2016-10-11 23:31:29 +0800 |
---|---|---|
committer | Daniel A. Nagy <nagy.da@gmail.com> | 2016-10-14 03:23:28 +0800 |
commit | eb2f01aee885994a28b3eb28d558f5b7a1c72b5f (patch) | |
tree | 8010059671432f016218940a17bf77c6a1762d79 /swarm | |
parent | a45421baaf2065203fa133a932967d5ea18fd0f7 (diff) | |
download | go-tangerine-eb2f01aee885994a28b3eb28d558f5b7a1c72b5f.tar.gz go-tangerine-eb2f01aee885994a28b3eb28d558f5b7a1c72b5f.tar.zst go-tangerine-eb2f01aee885994a28b3eb28d558f5b7a1c72b5f.zip |
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
Diffstat (limited to 'swarm')
-rw-r--r-- | swarm/storage/chunker.go | 13 |
1 files 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 |