diff options
author | Ian Lance Taylor <iant@golang.org> | 2011-01-18 08:10:22 -0800 |
---|---|---|
committer | Ian Lance Taylor <iant@golang.org> | 2011-01-18 08:10:22 -0800 |
commit | 2862d003cb052a672f34cca5125ff12628909fc2 (patch) | |
tree | cedf1554f436f3ce73c893e9181e4603eb563115 | |
parent | fa9befd777e6f2f96f69280392725533caef509c (diff) | |
download | go-2862d003cb052a672f34cca5125ff12628909fc2.tar.gz go-2862d003cb052a672f34cca5125ff12628909fc2.zip |
syscall: Correct length of GNU/Linux abstract Unix domain sockaddr.
R=rsc, iant2
CC=golang-dev
https://golang.org/cl/3974044
-rw-r--r-- | src/pkg/syscall/syscall_linux.go | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/pkg/syscall/syscall_linux.go b/src/pkg/syscall/syscall_linux.go index f7551c1056..d0f314c88b 100644 --- a/src/pkg/syscall/syscall_linux.go +++ b/src/pkg/syscall/syscall_linux.go @@ -253,12 +253,15 @@ func (sa *SockaddrUnix) sockaddr() (uintptr, _Socklen, int) { for i := 0; i < n; i++ { sa.raw.Path[i] = int8(name[i]) } + // length is family (uint16), name, NUL. + sl := 2 + _Socklen(n) + 1 if sa.raw.Path[0] == '@' { sa.raw.Path[0] = 0 + // Don't count trailing NUL for abstract address. + sl-- } - // length is family (uint16), name, NUL. - return uintptr(unsafe.Pointer(&sa.raw)), 2 + _Socklen(n) + 1, 0 + return uintptr(unsafe.Pointer(&sa.raw)), sl, 0 } type SockaddrLinklayer struct { |