]> Cypherpunks repositories - gostls13.git/commitdiff
Revert "net: in (*netFD).dial, use the passed in local address if getsockname fails"
authorBryan Mills <bcmills@google.com>
Tue, 7 Dec 2021 20:34:46 +0000 (20:34 +0000)
committerBryan Mills <bcmills@google.com>
Wed, 8 Dec 2021 15:31:54 +0000 (15:31 +0000)
This reverts CL 366536

Reason for revert: may have caused #50033 due to an invalid or partially-populated *TCPAddr

Fixes #50033

Change-Id: Ia29ca4116503dba65d56e89caa46ba1c848d421a
Reviewed-on: https://go-review.googlesource.com/c/go/+/369982
Trust: Bryan Mills <bcmills@google.com>
Run-TryBot: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/net/server_test.go
src/net/sock_posix.go

index b69cd292895f0ba25503d4f2fd000e6124b34f57..33d33b0337aeb4c2422366b4eaa014c418e9ddf1 100644 (file)
@@ -200,17 +200,9 @@ func TestUnixAndUnixpacketServer(t *testing.T) {
                                if c == nil {
                                        panic("Dial returned a nil Conn")
                                }
-                               rc := reflect.ValueOf(c)
-                               if rc.IsNil() {
+                               if rc := reflect.ValueOf(c); rc.Kind() == reflect.Pointer && rc.IsNil() {
                                        panic(fmt.Sprintf("Dial returned a nil %T", c))
                                }
-                               fd := rc.Elem().FieldByName("fd")
-                               if fd.IsNil() {
-                                       panic(fmt.Sprintf("Dial returned a %T with a nil fd", c))
-                               }
-                               if addr := fd.Elem().FieldByName("laddr"); addr.IsNil() {
-                                       panic(fmt.Sprintf("Dial returned a %T whose fd has a nil laddr", c))
-                               }
                                addr := c.LocalAddr()
                                if addr == nil {
                                        panic(fmt.Sprintf("(%T).LocalAddr returned a nil Addr", c))
index 603fb2bb64bbf4b2c65e5f822dd8c028f4c23756..98a48229c755517e9eff597cae1dfa944feaf5c4 100644 (file)
@@ -156,24 +156,18 @@ func (fd *netFD) dial(ctx context.Context, laddr, raddr sockaddr, ctrlFn func(st
                }
        }
        // Record the local and remote addresses from the actual socket.
-       // For the local address, use
-       // 1) the one returned by Getsockname, if that succeeds; or
-       // 2) the one passed to us as the laddr parameter; or
-       // 3) nil.
+       // Get the local address by calling Getsockname.
        // For the remote address, use
        // 1) the one returned by the connect method, if any; or
        // 2) the one from Getpeername, if it succeeds; or
        // 3) the one passed to us as the raddr parameter.
-       var laddrName Addr = laddr
-       if lsa, err := syscall.Getsockname(fd.pfd.Sysfd); err == nil {
-               laddrName = fd.addrFunc()(lsa)
-       }
+       lsa, _ = syscall.Getsockname(fd.pfd.Sysfd)
        if crsa != nil {
-               fd.setAddr(laddrName, fd.addrFunc()(crsa))
+               fd.setAddr(fd.addrFunc()(lsa), fd.addrFunc()(crsa))
        } else if rsa, _ = syscall.Getpeername(fd.pfd.Sysfd); rsa != nil {
-               fd.setAddr(laddrName, fd.addrFunc()(rsa))
+               fd.setAddr(fd.addrFunc()(lsa), fd.addrFunc()(rsa))
        } else {
-               fd.setAddr(laddrName, raddr)
+               fd.setAddr(fd.addrFunc()(lsa), raddr)
        }
        return nil
 }