OSDN Git Service

syscall: Fix handling of Unix domain @ addresses.
[pf3gnuchains/gcc-fork.git] / libgo / go / syscall / socket.go
index 9737590..d11d6cd 100644 (file)
@@ -87,12 +87,16 @@ func (sa *SockaddrUnix) sockaddr() (*RawSockaddrAny, Socklen_t, error) {
        for i := 0; i < n; i++ {
                sa.raw.Path[i] = int8(name[i])
        }
        for i := 0; i < n; i++ {
                sa.raw.Path[i] = int8(name[i])
        }
+       // length is family (uint16), name, NUL.
+       sl := 2 + Socklen_t(n) + 1
        if sa.raw.Path[0] == '@' {
                sa.raw.Path[0] = 0
        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.
        }
 
        // length is family (uint16), name, NUL.
-       return (*RawSockaddrAny)(unsafe.Pointer(&sa.raw)), 2 + Socklen_t(n) + 1, nil
+       return (*RawSockaddrAny)(unsafe.Pointer(&sa.raw)), sl, nil
 }
 
 func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {
 }
 
 func anyToSockaddr(rsa *RawSockaddrAny) (Sockaddr, error) {