From 0e50efea64e9bf8742930918b1c5242e611c510b Mon Sep 17 00:00:00 2001 From: Adam Hughes <9903835+tri-adam@users.noreply.github.com> Date: Fri, 26 Aug 2022 15:00:00 +0000 Subject: [PATCH 1/2] fix: use correct count when reading fragments Signed-off-by: Adam Hughes <9903835+tri-adam@users.noreply.github.com> --- reader.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/reader.go b/reader.go index 225830d..55f5ab7 100644 --- a/reader.go +++ b/reader.go @@ -96,20 +96,20 @@ func NewReader(r io.ReaderAt) (*Reader, error) { return nil, err } } else { - toRead := squash.s.IdCount - var curRead uint16 + toRead := squash.s.FragCount + var curRead uint32 var tmp []fragEntry var rdr *metadata.Reader var offset int for i := range fragOffsets { - curRead = uint16(math.Min(512, float64(toRead))) + curRead = uint32(math.Min(512, float64(toRead))) tmp = make([]fragEntry, curRead) rdr = metadata.NewReader(toreader.NewReader(r, int64(fragOffsets[i])), squash.d) err = binary.Read(rdr, binary.LittleEndian, &tmp) if err != nil { return nil, err } - offset = int(squash.s.IdCount - toRead) + offset = int(squash.s.FragCount - toRead) for i := range tmp { squash.fragEntries[offset+i] = tmp[i] } From 2230a449eced5bcf6e0896ea357d3aed64fc8ff7 Mon Sep 17 00:00:00 2001 From: Adam Hughes <9903835+tri-adam@users.noreply.github.com> Date: Fri, 26 Aug 2022 15:10:51 +0000 Subject: [PATCH 2/2] fix: use fs interfaces in type assertions Previous code would panic due to invalid type assertions (presumably due to change of type returned by func Sub). Switching to relevant fs interface types fixes the issue and should work going forward, even if the type is changed. Signed-off-by: Adam Hughes <9903835+tri-adam@users.noreply.github.com> --- reader_fs.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reader_fs.go b/reader_fs.go index b1d1f77..088e47a 100644 --- a/reader_fs.go +++ b/reader_fs.go @@ -131,7 +131,7 @@ func (f FS) Glob(pattern string) (out []string, err error) { Err: err, } } - subGlob, err := sub.(FS).Glob(strings.Join(split[1:], "/")) + subGlob, err := sub.(fs.GlobFS).Glob(strings.Join(split[1:], "/")) if err != nil { if pathErr, ok := err.(*fs.PathError); ok { if pathErr.Err == fs.ErrNotExist { @@ -208,7 +208,7 @@ func (f FS) ReadDir(name string) ([]fs.DirEntry, error) { Err: err, } } - redDir, err := sub.(FS).ReadDir(strings.Join(split[1:], "/")) + redDir, err := sub.(fs.ReadDirFS).ReadDir(strings.Join(split[1:], "/")) if err != nil { if pathErr, ok := err.(*fs.PathError); ok { if pathErr.Err == fs.ErrNotExist { @@ -299,7 +299,7 @@ func (f FS) Stat(name string) (fs.FileInfo, error) { Err: err, } } - stat, err := sub.(FS).Stat(strings.Join(split[1:], "/")) + stat, err := sub.(fs.StatFS).Stat(strings.Join(split[1:], "/")) if err != nil { if pathErr, ok := err.(*fs.PathError); ok { if pathErr.Err == fs.ErrNotExist {