From 5b2327776ac56a7d842b1fe623c0f2a6a203e019 Mon Sep 17 00:00:00 2001 From: noisyfox Date: Sat, 27 Aug 2016 03:35:33 +1000 Subject: [PATCH] Fix a null ref exception. --- shadowsocks-csharp/Controller/Service/Listener.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/shadowsocks-csharp/Controller/Service/Listener.cs b/shadowsocks-csharp/Controller/Service/Listener.cs index b2c33262..56222d7f 100644 --- a/shadowsocks-csharp/Controller/Service/Listener.cs +++ b/shadowsocks-csharp/Controller/Service/Listener.cs @@ -27,6 +27,7 @@ namespace Shadowsocks.Controller public class UDPState { + public Socket socket; public byte[] buffer = new byte[4096]; public EndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0); } @@ -86,6 +87,7 @@ namespace Shadowsocks.Controller Logging.Info("Shadowsocks started"); _tcpSocket.BeginAccept(new AsyncCallback(AcceptCallback), _tcpSocket); UDPState udpState = new UDPState(); + udpState.socket = _udpSocket; _udpSocket.BeginReceiveFrom(udpState.buffer, 0, udpState.buffer.Length, 0, ref udpState.remoteEndPoint, new AsyncCallback(RecvFromCallback), udpState); } catch (SocketException) @@ -114,12 +116,13 @@ namespace Shadowsocks.Controller public void RecvFromCallback(IAsyncResult ar) { UDPState state = (UDPState)ar.AsyncState; + var socket = state.socket; try { - int bytesRead = _udpSocket.EndReceiveFrom(ar, ref state.remoteEndPoint); + int bytesRead = socket.EndReceiveFrom(ar, ref state.remoteEndPoint); foreach (IService service in _services) { - if (service.Handle(state.buffer, bytesRead, _udpSocket, state)) + if (service.Handle(state.buffer, bytesRead, socket, state)) { break; } @@ -136,7 +139,7 @@ namespace Shadowsocks.Controller { try { - _udpSocket.BeginReceiveFrom(state.buffer, 0, state.buffer.Length, 0, ref state.remoteEndPoint, new AsyncCallback(RecvFromCallback), state); + socket.BeginReceiveFrom(state.buffer, 0, state.buffer.Length, 0, ref state.remoteEndPoint, new AsyncCallback(RecvFromCallback), state); } catch (ObjectDisposedException) {