]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: Correct length of GNU/Linux abstract Unix domain sockaddr.
authorIan Lance Taylor <iant@golang.org>
Tue, 18 Jan 2011 16:10:22 +0000 (08:10 -0800)
committerIan Lance Taylor <iant@golang.org>
Tue, 18 Jan 2011 16:10:22 +0000 (08:10 -0800)
R=rsc, iant2
CC=golang-dev
https://golang.org/cl/3974044

src/pkg/syscall/syscall_linux.go

index f7551c10562703693055b7cffea0d037933bcf65..d0f314c88bb05d3153644aec53834389092790fb 100644 (file)
@@ -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 {