Skip to content

Commit 777dbcf

Browse files
committed
Added more test cases
1 parent 8d200a6 commit 777dbcf

1 file changed

Lines changed: 24 additions & 2 deletions

File tree

extractor_test.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,30 @@ func TestSymLinkMazeHardening(t *testing.T) {
212212
require.NoError(t, tw.Close())
213213

214214
extractor := extract.Extractor{FS: &LoggingFS{}}
215-
require.NoError(t, extractor.Tar(context.Background(), outputTar, targetDir.String(), nil))
216-
require.FileExists(t, targetDir.Join("tmp", "sym").String())
215+
require.Error(t, extractor.Tar(context.Background(), outputTar, targetDir.String(), nil))
216+
require.NoFileExists(t, targetDir.Join("tmp", "sym").String())
217+
})
218+
219+
t.Run("TarWithDoubleSymlinkToExternalPath", func(t *testing.T) {
220+
// Create target dir
221+
tmp := mkTempDir(t)
222+
targetDir := tmp.Join("test")
223+
require.NoError(t, targetDir.Mkdir())
224+
fmt.Println("TMP:", tmp)
225+
fmt.Println("TARGET DIR:", targetDir)
226+
227+
// Make a tar archive with regular symlink maze
228+
outputTar := bytes.NewBuffer(nil)
229+
tw := tar.NewWriter(outputTar)
230+
tw.WriteHeader(&tar.Header{Name: "fake", Mode: 0777, Typeflag: tar.TypeDir})
231+
addTarSymlink(t, tw, "sym-maze", tmp.String())
232+
addTarSymlink(t, tw, "sym-maze", "fake")
233+
addTarSymlink(t, tw, "sym-maze/oops", "/tmp/something")
234+
require.NoError(t, tw.Close())
235+
236+
extractor := extract.Extractor{FS: &LoggingFS{}}
237+
require.Error(t, extractor.Tar(context.Background(), outputTar, targetDir.String(), nil))
238+
require.NoFileExists(t, tmp.Join("oops").String())
217239
})
218240

219241
t.Run("TarWithSymlinkToExternalPathWithoutMazing", func(t *testing.T) {

0 commit comments

Comments
 (0)