package aptrepo import ( "os" "path" "path/filepath" "syscall" "testing" ) func TestArtifactRejectsSymlinksAndFIFO(t *testing.T) { for _, kind := range []string{"root-link", "file-link", "fifo"} { t.Run(kind, func(t *testing.T) { dir, lock := artifactFixture(t) filename := filepath.Join(dir, path.Base(lock.Packages[0].Filename)) switch kind { case "root-link": link := filepath.Join(t.TempDir(), "link") if err := os.Symlink(dir, link); err != nil { t.Fatal(err) } dir = link + "/" case "file-link": target := filepath.Join(t.TempDir(), "target") if err := os.Rename(filename, target); err != nil { t.Fatal(err) } if err := os.Symlink(target, filename); err != nil { t.Fatal(err) } case "fifo": if err := os.Remove(filename); err != nil { t.Fatal(err) } if err := syscall.Mkfifo(filename, 0600); err != nil { t.Fatal(err) } } if err := verifyArtifacts(dir, lock); err == nil { t.Fatal("unsafe file accepted") } }) } }