34 lines
1018 B
Go
34 lines
1018 B
Go
package compose
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestWindowsTerminationUsesBoundedExactPIDTreeKillWithoutAShell(t *testing.T) {
|
|
source, err := os.ReadFile("process_windows.go")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
text := string(source)
|
|
for _, required := range []string{
|
|
"context.WithTimeout", "windows.GetSystemDirectory", "filepath.Clean", "filepath.IsAbs",
|
|
`filepath.Join(systemDirectory, "taskkill.exe")`, "systemTaskkillPath",
|
|
`exec.CommandContext(ctx, taskkillPath, "/PID", strconv.Itoa(pid), "/T", "/F")`,
|
|
"io.Discard", "ErrProcessReap",
|
|
} {
|
|
if !strings.Contains(text, required) {
|
|
t.Errorf("process_windows.go is missing %q", required)
|
|
}
|
|
}
|
|
for _, forbidden := range []string{
|
|
"cmd.exe", "powershell", `exec.Command("taskkill.exe"`,
|
|
`exec.CommandContext(ctx, "taskkill.exe"`, `exec.LookPath("taskkill.exe")`,
|
|
} {
|
|
if strings.Contains(strings.ToLower(text), strings.ToLower(forbidden)) {
|
|
t.Errorf("process_windows.go contains unsafe command form %q", forbidden)
|
|
}
|
|
}
|
|
}
|