45 lines
1.0 KiB
Go
45 lines
1.0 KiB
Go
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")
|
|
}
|
|
})
|
|
}
|
|
}
|