[tor-commits] [goptlib/master] Convert IP to IPv4 before writing it in SOCKS response.

dcf at torproject.org dcf at torproject.org
Mon Dec 9 02:49:51 UTC 2013


commit 7cbdfa4c1514b9667101b9e7fb6c7682de157ff3
Author: David Fifield <david at bamsoftware.com>
Date:   Sat Dec 7 21:26:15 2013 -0800

    Convert IP to IPv4 before writing it in SOCKS response.
    
    This was a bug; if the IP was a 16-byte slice, then we would read the
    first four bytes, which were zero. Document that address families other
    than IPv4 fill the four address bytes with zero, so that we sort of work
    with IPv6.
---
 socks.go |   15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/socks.go b/socks.go
index a5889fa..8534636 100644
--- a/socks.go
+++ b/socks.go
@@ -161,17 +161,22 @@ func readSocks4aConnect(s io.Reader) (req SocksRequest, err error) {
 	return
 }
 
-// Send a SOCKS4a response with the given code and address.
+// Send a SOCKS4a response with the given code and address. If the IP field
+// inside addr is not an IPv4 address, the IP portion of the response will be
+// four zero bytes.
 func sendSocks4aResponse(w io.Writer, code byte, addr *net.TCPAddr) error {
 	var resp [8]byte
 	resp[0] = socksResponseVersion
 	resp[1] = code
 	resp[2] = byte((addr.Port >> 8) & 0xff)
 	resp[3] = byte((addr.Port >> 0) & 0xff)
-	resp[4] = addr.IP[0]
-	resp[5] = addr.IP[1]
-	resp[6] = addr.IP[2]
-	resp[7] = addr.IP[3]
+	ipv4 := addr.IP.To4()
+	if ipv4 != nil {
+		resp[4] = ipv4[0]
+		resp[5] = ipv4[1]
+		resp[6] = ipv4[2]
+		resp[7] = ipv4[3]
+	}
 	_, err := w.Write(resp[:])
 	return err
 }





More information about the tor-commits mailing list