diff --git a/reader_frag.go b/reader_frag.go index 87b79ca..0e94e2e 100644 --- a/reader_frag.go +++ b/reader_frag.go @@ -1,6 +1,7 @@ package squashfs import ( + "bytes" "io" "github.com/CalebQ42/squashfs/internal/toreader" @@ -12,8 +13,11 @@ type fragEntry struct { _ uint32 } -func (r Reader) fragReader(index uint32) (io.Reader, error) { +func (r Reader) fragReader(index uint32, fragSize uint32) (io.Reader, error) { realSize := r.fragEntries[index].Size &^ (1 << 24) + if realSize == 0 { + return bytes.NewReader(make([]byte, fragSize)), nil + } rdr := io.LimitReader(toreader.NewReader(r.r, int64(r.fragEntries[index].Start)), int64(realSize)) if realSize != r.fragEntries[index].Size { return rdr, nil diff --git a/reader_inode.go b/reader_inode.go index 567d52b..ec0516c 100644 --- a/reader_inode.go +++ b/reader_inode.go @@ -59,7 +59,7 @@ func (r Reader) getReaders(i inode.Inode) (full *data.FullReader, rdr *data.Read if fragInd != 0xFFFFFFFF { full.AddFragment(func() (io.Reader, error) { var fragRdr io.Reader - fragRdr, err = r.fragReader(fragInd) + fragRdr, err = r.fragReader(fragInd, fragSize) if err != nil { return nil, err } @@ -75,7 +75,7 @@ func (r Reader) getReaders(i inode.Inode) (full *data.FullReader, rdr *data.Read return fragRdr, nil }) var fragRdr io.Reader - fragRdr, err = r.fragReader(fragInd) + fragRdr, err = r.fragReader(fragInd, fragSize) if err != nil { return nil, nil, err }