diff --git a/key.go b/key.go index c914f77e..cbaf5a92 100644 --- a/key.go +++ b/key.go @@ -543,6 +543,24 @@ func (d *decryptReader) Read(dst []byte) (int, error) { return n, nil } +func (d *decryptReader) ReadByte() (c byte, err error) { + if d.buf == nil { + return 0, io.EOF + } + + remaining := len(d.buf) - d.pos + if remaining == 1 { + c = d.buf[d.pos] + d.Close() + return c, io.EOF + } + + c = d.buf[d.pos] + d.pos++ + + return +} + func (d *decryptReader) Close() error { if d.buf == nil { return nil diff --git a/server.go b/server.go index 07adeec9..1a2e58a8 100644 --- a/server.go +++ b/server.go @@ -2,6 +2,7 @@ package restic import ( "bytes" + "compress/flate" "compress/zlib" "crypto/sha256" "encoding/json" @@ -146,8 +147,10 @@ func (s Server) LoadJSONID(t backend.Type, storageID backend.ID, item interface{ } // unzip + br := decryptRd.(flate.Reader) + unzipRd := zReaderPool.Get().(zReader) - err = unzipRd.Reset(decryptRd, nil) + err = unzipRd.Reset(br, nil) defer func() { unzipRd.Close() zReaderPool.Put(unzipRd)