Protect regular files from FIFO setup

This commit is contained in:
Brandon McGinty (chatgpt)
2026-08-10 08:50:56 -04:00
committed by Brandon McGinty
parent dcffa1efa1
commit 43d7addc15
2 changed files with 34 additions and 1 deletions
+10 -1
View File
@@ -87,7 +87,16 @@ func setup_fifo(fn string) (chan string, error) {
if fn == "" { if fn == "" {
return t, nil return t, nil
} }
os.Remove(fn) if info, err := os.Lstat(fn); err == nil {
if info.Mode()&os.ModeNamedPipe == 0 {
return t, fmt.Errorf("FIFO path %q already exists and is not a FIFO", fn)
}
if err := os.Remove(fn); err != nil {
return t, err
}
} else if !os.IsNotExist(err) {
return t, err
}
err := syscall.Mkfifo(fn, 0600) err := syscall.Mkfifo(fn, 0600)
if err != nil { if err != nil {
return t, err return t, err
+24
View File
@@ -0,0 +1,24 @@
package main
import (
"os"
"path/filepath"
"testing"
)
func TestSetupFIFORefusesToReplaceRegularFile(t *testing.T) {
path := filepath.Join(t.TempDir(), "not-a-fifo")
if err := os.WriteFile(path, []byte("keep"), 0600); err != nil {
t.Fatal(err)
}
if _, err := setup_fifo(path); err == nil {
t.Fatal("setup_fifo replaced a regular file")
}
contents, err := os.ReadFile(path)
if err != nil {
t.Fatal(err)
}
if string(contents) != "keep" {
t.Fatalf("regular file was modified: %q", contents)
}
}