diff --git a/tools/utils/tmpfile_linux.go b/tools/utils/tmpfile_linux.go index 95c2bec79..cf4bf5377 100644 --- a/tools/utils/tmpfile_linux.go +++ b/tools/utils/tmpfile_linux.go @@ -24,7 +24,11 @@ func CreateAnonymousTemp(dir string) (*os.File, error) { return os.NewFile(uintptr(fd), path), nil } if err == unix.ENOENT { - return nil, err + return nil, &os.PathError{ + Op: "open", + Path: dir, + Err: err, + } } f, err := os.CreateTemp(dir, "") if err != nil { diff --git a/tools/utils/tpmfile_test.go b/tools/utils/tpmfile_test.go new file mode 100644 index 000000000..ce7f9bf0a --- /dev/null +++ b/tools/utils/tpmfile_test.go @@ -0,0 +1,26 @@ +// License: GPLv3 Copyright: 2023, Kovid Goyal, + +package utils + +import ( + "fmt" + "runtime" + "strconv" + "testing" +) + +var _ = fmt.Print + +func TestCreateAnonymousTempfile(t *testing.T) { + f, err := CreateAnonymousTemp("") + if err != nil { + t.Fatal(err) + } + fd := int64(f.Fd()) + f.Close() + if runtime.GOOS == "linux" { + if f.Name() != "/proc/self/fd/"+strconv.FormatInt(fd, 10) { + t.Fatalf("Anonymous tempfile was not created atomically") + } + } +}