diff options
author | Alfred Morgan <alfred@54.org> | 2024-08-22 01:31:35 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-22 10:31:35 +0200 |
commit | cb7bcae7f73bb907170f67e5e245f474a48760b3 (patch) | |
tree | f61fe3b3d446e3d5e92e58450da4f683280ec246 | |
parent | 79f5a74408fab60c21e3905b72fe7dcdcb34eb52 (diff) | |
download | Nim-cb7bcae7f73bb907170f67e5e245f474a48760b3.tar.gz |
fixes #23956; bindUnix loses the last character on OpenBSD (#23961)
uses calculation as shown in https://man7.org/linux/man-pages/man7/unix.7.html > offsetof(struct sockaddr_un, sun_path) + strlen(sun_path) + 1
-rw-r--r-- | lib/pure/asyncnet.nim | 4 | ||||
-rw-r--r-- | lib/pure/net.nim | 4 |
2 files changed, 4 insertions, 4 deletions
diff --git a/lib/pure/asyncnet.nim b/lib/pure/asyncnet.nim index d8dc7a798..ee07e599e 100644 --- a/lib/pure/asyncnet.nim +++ b/lib/pure/asyncnet.nim @@ -687,7 +687,7 @@ when defined(posix) and not useNimNetLite: var socketAddr = makeUnixAddr(path) let ret = socket.fd.connect(cast[ptr SockAddr](addr socketAddr), - (sizeof(socketAddr.sun_family) + path.len).SockLen) + (offsetOf(socketAddr, sun_path) + path.len + 1).SockLen) if ret == 0: # Request to connect completed immediately. retFuture.complete() @@ -705,7 +705,7 @@ when defined(posix) and not useNimNetLite: when not defined(nimdoc): var socketAddr = makeUnixAddr(path) if socket.fd.bindAddr(cast[ptr SockAddr](addr socketAddr), - (sizeof(socketAddr.sun_family) + path.len).SockLen) != 0'i32: + (offsetOf(socketAddr, sun_path) + path.len + 1).SockLen) != 0'i32: raiseOSError(osLastError()) elif defined(nimdoc): diff --git a/lib/pure/net.nim b/lib/pure/net.nim index 7f6a36557..3324ed9b1 100644 --- a/lib/pure/net.nim +++ b/lib/pure/net.nim @@ -1321,7 +1321,7 @@ when defined(nimdoc) or (defined(posix) and not useNimNetLite): when not defined(nimdoc): var socketAddr = makeUnixAddr(path) if socket.fd.connect(cast[ptr SockAddr](addr socketAddr), - (sizeof(socketAddr.sun_family) + path.len).SockLen) != 0'i32: + (offsetOf(socketAddr, sun_path) + path.len + 1).SockLen) != 0'i32: raiseOSError(osLastError()) proc bindUnix*(socket: Socket, path: string) = @@ -1330,7 +1330,7 @@ when defined(nimdoc) or (defined(posix) and not useNimNetLite): when not defined(nimdoc): var socketAddr = makeUnixAddr(path) if socket.fd.bindAddr(cast[ptr SockAddr](addr socketAddr), - (sizeof(socketAddr.sun_family) + path.len).SockLen) != 0'i32: + (offsetOf(socketAddr, sun_path) + path.len + 1).SockLen) != 0'i32: raiseOSError(osLastError()) when defineSsl: |