fortify/wl/wl.go
Ophestra d0dff1cac9
All checks were successful
Test / Create distribution (push) Successful in 23s
Test / Run NixOS test (push) Successful in 54s
wl: check against null character
Wayland library takes null terminated strings.

Signed-off-by: Ophestra <cat@gensokyo.uk>
2025-02-19 23:35:49 +09:00

37 lines
1.2 KiB
Go

package wl
//go:generate sh -c "wayland-scanner client-header `pkg-config --variable=datarootdir wayland-protocols`/wayland-protocols/staging/security-context/security-context-v1.xml security-context-v1-protocol.h"
//go:generate sh -c "wayland-scanner private-code `pkg-config --variable=datarootdir wayland-protocols`/wayland-protocols/staging/security-context/security-context-v1.xml security-context-v1-protocol.c"
/*
#cgo linux pkg-config: --static wayland-client
#cgo freebsd openbsd LDFLAGS: -lwayland-client
#include "wayland-bind.h"
*/
import "C"
import (
"errors"
"strings"
)
var (
ErrContainsNull = errors.New("string contains null character")
)
var resErr = [...]error{
0: nil,
1: errors.New("wl_display_connect_to_fd() failed"),
2: errors.New("wp_security_context_v1 not available"),
}
func bindWaylandFd(socketPath string, fd uintptr, appID, instanceID string, syncFD uintptr) error {
if hasNull(appID) || hasNull(instanceID) {
return ErrContainsNull
}
res := C.bind_wayland_fd(C.CString(socketPath), C.int(fd), C.CString(appID), C.CString(instanceID), C.int(syncFD))
return resErr[int32(res)]
}
func hasNull(s string) bool { return strings.IndexByte(s, '\x00') > -1 }