diff --git a/adapter/outbound/shadowsocksr.go b/adapter/outbound/shadowsocksr.go index a9975107..efc368a4 100644 --- a/adapter/outbound/shadowsocksr.go +++ b/adapter/outbound/shadowsocksr.go @@ -252,13 +252,14 @@ func (spc *ssrPacketConn) WaitReadFrom() (data []byte, put func(), addr net.Addr return nil, nil, nil, errors.New("parse addr error") } - addr = _addr.UDPAddr() - if addr == nil { + udpAddr := _addr.UDPAddr() + if udpAddr == nil { if put != nil { put() } return nil, nil, nil, errors.New("parse addr error") } + addr = udpAddr data = data[len(_addr):] return diff --git a/transport/trojan/trojan.go b/transport/trojan/trojan.go index 93819130..73b09dbc 100644 --- a/transport/trojan/trojan.go +++ b/transport/trojan/trojan.go @@ -183,7 +183,11 @@ func (pc *PacketConn) WaitReadFrom() (data []byte, put func(), addr net.Addr, er if err != nil { return nil, nil, nil, err } - addr = destination.UDPAddr() + udpAddr := destination.UDPAddr() + if udpAddr == nil { + return nil, nil, nil, errors.New("parse addr error") + } + addr = udpAddr data = pool.Get(pool.UDPBufferSize) put = func() {