package hostbox import ( "os" "path/filepath" "testing" ) func TestClaimReviewJournalsRefusePlantedSymlinks(t *testing.T) { for _, kind := range []string{"launch", "inventory"} { for _, suffix := range []string{"", "-wal", "-shm"} { t.Run(kind+suffix, func(t *testing.T) { dir := t.TempDir() path := filepath.Join(dir, "journal.db") victim := filepath.Join(dir, "victim") if err := os.Symlink(victim, path+suffix); err != nil { t.Fatal(err) } var err error if kind == "launch" { var j *LaunchJournal j, err = OpenLaunchJournal(path) if err == nil { j.Close() } } else { var j *StopInventoryDB j, err = OpenStopInventoryDB(path) if err == nil { j.Close() } } if err == nil { t.Error("planted symlink accepted") } if _, err := os.Lstat(victim); !os.IsNotExist(err) { t.Fatalf("SQLite touched symlink target: %v", err) } }) } } }