Skip to content

Commit

Permalink
Ignore global header entries when creating an FS (#19)
Browse files Browse the repository at this point in the history
Closes #18
  • Loading branch information
nlepage committed Aug 15, 2023
2 parents 59cb291 + 250a2c6 commit 5be978f
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 0 deletions.
3 changes: 3 additions & 0 deletions fs.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@ func New(r io.Reader) (fs.FS, error) {
if err != nil {
return nil, err
}
if h.Typeflag == tar.TypeXGlobalHeader {
continue
}

name := path.Clean(h.Name)
if name == "." {
Expand Down
16 changes: 16 additions & 0 deletions fs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -413,3 +413,19 @@ func TestSparse(t *testing.T) {
assert.Equal([]byte("file2"), file2Actual, "fs.ReadFile(tfs, \"file2\")")
}
}

func TestIgnoreGlobalHeader(t *testing.T) {
require := require.New(t)

// This file was created by initializing a git repository,
// committing a few files, and running: `git archive HEAD`
f, err := os.Open("test-with-global-header.tar")
require.NoError(err)
defer f.Close()

tfs, err := New(f)
require.NoError(err)

err = fstest.TestFS(tfs, "bar", "dir1", "dir1/file11")
require.NoError(err)
}
Binary file added test-with-global-header.tar
Binary file not shown.

0 comments on commit 5be978f

Please sign in to comment.