diff --git a/Sources/Packages/Sources/SecretAgentKit/SocketController.swift b/Sources/Packages/Sources/SecretAgentKit/SocketController.swift index 3143d99..90e56f8 100644 --- a/Sources/Packages/Sources/SecretAgentKit/SocketController.swift +++ b/Sources/Packages/Sources/SecretAgentKit/SocketController.swift @@ -45,20 +45,14 @@ public class SocketController { var addr = sockaddr_un() addr.sun_family = sa_family_t(AF_UNIX) - var len: Int = 0 + let len = MemoryLayout.size(ofValue: addr.sun_path) - 1 withUnsafeMutablePointer(to: &addr.sun_path.0) { pointer in - path.withCString { cstring in - len = strlen(cstring) - strncpy(pointer, cstring, len) - } - } - addr.sun_len = UInt8(len+2) - - var data: Data! - withUnsafePointer(to: &addr) { pointer in - data = Data(bytes: pointer, count: MemoryLayout.size) + // The buffer is pre-zeroed, so manual termination is unnecessary. + precondition(memccpy(pointer, path, 0, len) != nil) } + addr.sun_len = UInt8(len) + let data = withUnsafeBytes(of: &addr, Data.init(_:)) return SocketPort(protocolFamily: AF_UNIX, socketType: SOCK_STREAM, protocol: 0, address: data)! }