From 6dbb1ceb14d58303dde94bcc7503c83a19944eb8 Mon Sep 17 00:00:00 2001
From: Konrad Zemek <konrad.zemek@gmail.com>
Date: Fri, 7 Jun 2019 18:47:05 +0200
Subject: [PATCH] Fix error when saddr read from PROXY is nil.

---
 udp.go | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/udp.go b/udp.go
index 7d543c2..923bc64 100644
--- a/udp.go
+++ b/udp.go
@@ -31,7 +31,11 @@ func udpCloseAfterInactivity(conn *udpConnection, socketClosures chan<- string)
 		}
 	}
 	conn.upstream.Close()
-	socketClosures <- conn.clientAddr.String()
+	if conn.clientAddr != nil {
+		socketClosures <- conn.clientAddr.String()
+	} else {
+		socketClosures <- ""
+	}
 }
 
 func udpCopyFromUpstream(downstream net.PacketConn, conn *udpConnection) {
@@ -83,7 +87,7 @@ func udpGetSocketFromMap(downstream net.PacketConn, downstreamAddr, saddr net.Ad
 	if saddr != nil {
 		connKey = saddr.String()
 	}
-	if conn := connMap[saddr.String()]; conn != nil {
+	if conn := connMap[connKey]; conn != nil {
 		atomic.AddInt64(conn.lastActivity, 1)
 		return conn, nil
 	}
@@ -113,8 +117,10 @@ func udpGetSocketFromMap(downstream net.PacketConn, downstreamAddr, saddr net.Ad
 	udpConn := &udpConnection{upstream: conn.(*net.UDPConn),
 		logger:         logger,
 		lastActivity:   new(int64),
-		clientAddr:     saddr.(*net.UDPAddr),
 		downstreamAddr: downstreamAddr.(*net.UDPAddr)}
+	if saddr != nil {
+		udpConn.clientAddr = saddr.(*net.UDPAddr)
+	}
 
 	go udpCopyFromUpstream(downstream, udpConn)
 	go udpCloseAfterInactivity(udpConn, socketClosures)
-- 
GitLab