2
2
mirror of https://github.com/octoleo/restic.git synced 2024-12-22 10:58:55 +00:00

Fix special case with null byte input

This commit is contained in:
Alexander Neumann 2014-10-02 23:01:01 +02:00
parent b3a4bbc850
commit 83ea81d8c3
2 changed files with 23 additions and 9 deletions

View File

@ -154,7 +154,8 @@ func (c *chunker) Next() (*Chunk, error) {
if err == io.EOF && !c.closed {
c.closed = true
// return current chunk
// return current chunk, if any bytes have been processed
if c.count > 0 {
return &Chunk{
Start: c.start,
Length: c.count,
@ -162,6 +163,7 @@ func (c *chunker) Next() (*Chunk, error) {
Data: c.data,
}, nil
}
}
if err != nil {
return nil, err

View File

@ -46,6 +46,14 @@ var chunks1 = []chunk{
chunk{237392, 0x00184c5825e18636},
}
// test if nullbytes are correctly split, even if length is a multiple of MinSize.
var chunks2 = []chunk{
chunk{chunker.MinSize, 0},
chunk{chunker.MinSize, 0},
chunk{chunker.MinSize, 0},
chunk{chunker.MinSize, 0},
}
func test_with_data(t *testing.T, chunker chunker.Chunker, chunks []chunk) {
for i, chunk := range chunks {
c, err := chunker.Next()
@ -105,10 +113,14 @@ func get_random(seed, count int) []byte {
func TestChunker(t *testing.T) {
// setup data source
buf := get_random(23, 32*1024*1024)
ch := chunker.New(bytes.NewReader(buf))
test_with_data(t, ch, chunks1)
// setup nullbyte data source
buf = bytes.Repeat([]byte{0}, len(chunks2)*chunker.MinSize)
ch = chunker.New(bytes.NewReader(buf))
test_with_data(t, ch, chunks2)
}
func BenchmarkChunker(b *testing.B) {