diff options
| author | Ophestra <cat@gensokyo.uk> | 2025-11-16 03:34:05 +0900 |
|---|---|---|
| committer | Ophestra <cat@gensokyo.uk> | 2025-11-16 03:34:05 +0900 |
| commit | 38b5ff0cec266c7c5e423b68e8626f4a4a63d3ee (patch) | |
| tree | 77d33091b0348c5a57cf328fa682ebb35aeaa99e /internal/wayland/conn_test.go | |
| parent | 3c204b9b40373d1f404b1a16e95fdfebb7d58832 (diff) | |
internal/wayland: check pathname size
This avoids passing a truncated pathname to the kernel.
Signed-off-by: Ophestra <cat@gensokyo.uk>
Diffstat (limited to 'internal/wayland/conn_test.go')
| -rw-r--r-- | internal/wayland/conn_test.go | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/internal/wayland/conn_test.go b/internal/wayland/conn_test.go new file mode 100644 index 00000000..4be6dbf6 --- /dev/null +++ b/internal/wayland/conn_test.go @@ -0,0 +1,54 @@ +package wayland + +import ( + "errors" + "os" + "reflect" + "syscall" + "testing" + + "hakurei.app/container/check" +) + +func TestSecurityContextClose(t *testing.T) { + t.Parallel() + + if err := (*SecurityContext)(nil).Close(); !reflect.DeepEqual(err, os.ErrInvalid) { + t.Fatalf("Close: error = %v", err) + } + + var ctx SecurityContext + if err := syscall.Pipe2(ctx.closeFds[0:], syscall.O_CLOEXEC); err != nil { + t.Fatalf("Pipe: error = %v", err) + } + t.Cleanup(func() { _ = syscall.Close(ctx.closeFds[0]); _ = syscall.Close(ctx.closeFds[1]) }) + + if err := ctx.Close(); err != nil { + t.Fatalf("Close: error = %v", err) + } + + wantErr := errors.Join(syscall.EBADF, syscall.EBADF) + if err := ctx.Close(); !reflect.DeepEqual(err, wantErr) { + t.Fatalf("Close: error = %#v, want %#v", err, wantErr) + } +} + +func TestNewEnsure(t *testing.T) { + existingDirPath := check.MustAbs(t.TempDir()).Append("dir") + if err := os.MkdirAll(existingDirPath.String(), 0700); err != nil { + t.Fatal(err) + } + nonexistent := check.MustAbs("/proc/nonexistent") + + wantErr := &Error{RCreate, existingDirPath.String(), nonexistent.String(), &os.PathError{ + Op: "open", + Path: existingDirPath.String(), + Err: syscall.EISDIR, + }} + if _, err := New( + nonexistent, + existingDirPath, "", "", + ); !reflect.DeepEqual(err, wantErr) { + t.Fatalf("New: error = %#v, want %#v", err, wantErr) + } +} |
