Simplify root-scoped cleanup

This commit is contained in:
2026-09-02 00:48:40 +00:00
parent 39b2665d8b
commit 1e418d6929
8 changed files with 42 additions and 145 deletions

View File

@@ -38,6 +38,9 @@ func TestRemoveAllUnderRootRejectsUnsafeTargets(t *testing.T) {
if err := RemoveAllUnderRoot(root, filepath.Join(outside, "target")); err == nil {
t.Fatal("RemoveAllUnderRoot(outside) error = nil, want outside-root rejection")
}
if err := RemoveAllUnderRoot(root, filepath.Join(root, "runs", "..")); err == nil {
t.Fatal("RemoveAllUnderRoot(root relative traversal) error = nil, want root rejection")
}
if err := os.Symlink(outside, filepath.Join(root, "runs")); err == nil {
t.Fatal("Symlink() error = nil, want collision because runs already exists")
}
@@ -48,7 +51,7 @@ func TestRemoveAllUnderRootRejectsUnsafeTargets(t *testing.T) {
t.Fatalf("Symlink() error = %v", err)
}
if err := RemoveAllUnderRoot(root, target); err == nil {
t.Fatal("RemoveAllUnderRoot(symlinked ancestor) error = nil, want rejection")
t.Fatal("RemoveAllUnderRoot(symlinked ancestor) error = nil, want root confinement error")
}
data, err := os.ReadFile(sentinel)
if err != nil {
@@ -59,7 +62,7 @@ func TestRemoveAllUnderRootRejectsUnsafeTargets(t *testing.T) {
}
}
func TestRemoveAllUnderRootRejectsSymlinkInTree(t *testing.T) {
func TestRemoveAllUnderRootRemovesRootContainedSymlink(t *testing.T) {
root := t.TempDir()
outside := t.TempDir()
target := filepath.Join(root, "runs", "run-1")
@@ -72,12 +75,15 @@ func TestRemoveAllUnderRootRejectsSymlinkInTree(t *testing.T) {
t.Fatalf("Symlink() error = %v", err)
}
if err := RemoveAllUnderRoot(root, target); err == nil {
t.Fatal("RemoveAllUnderRoot() error = nil, want symlink rejection")
if err := RemoveAllUnderRoot(root, target); err != nil {
t.Fatalf("RemoveAllUnderRoot() error = %v", err)
}
if _, err := os.Stat(sentinel); err != nil {
t.Fatalf("outside sentinel was changed: %v", err)
}
if _, err := os.Lstat(target); !errors.Is(err, os.ErrNotExist) {
t.Fatalf("Lstat(%q) error = %v, want not exist", target, err)
}
}
func TestRemoveFileUnderRootRemovesOnlyRegularFile(t *testing.T) {