From b3386576c45aa0b206f280c1720041613eab8655 Mon Sep 17 00:00:00 2001 From: Ilya Zimin Date: Wed, 1 Nov 2017 16:38:55 +0300 Subject: [PATCH 1/3] fix nre - https://github.com/Inumedia/SlackAPI/issues/109 --- SlackAPI/Request.cs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/SlackAPI/Request.cs b/SlackAPI/Request.cs index e6f0567..bb12715 100644 --- a/SlackAPI/Request.cs +++ b/SlackAPI/Request.cs @@ -75,12 +75,21 @@ internal void GotResponse(IAsyncResult result) catch (WebException we) { // If we don't get a response, let the exception bubble up as we can't do anything - if (we.Response == null) throw we; + if (we.Response == null) + { + var defaultResponse = default(K); + defaultResponse.ok = false; + defaultResponse.error = we.ToString(); + if (callback != null) + callback(defaultResponse); + return; + } //Anything that doesn't return error 200 throws an exception. Sucks. :l response = (HttpWebResponse)we.Response; //TODO: Handle timeouts, etc? } + K responseObj; From 9f7b35ecb3e310d8b65b2270134581e79c36724b Mon Sep 17 00:00:00 2001 From: Ilya Zimin Date: Mon, 6 Nov 2017 12:39:25 +0300 Subject: [PATCH 2/3] fix nre - https://github.com/Inumedia/SlackAPI/issues/109 --- SlackAPI/Request.cs | 57 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 43 insertions(+), 14 deletions(-) diff --git a/SlackAPI/Request.cs b/SlackAPI/Request.cs index bb12715..ba634d3 100644 --- a/SlackAPI/Request.cs +++ b/SlackAPI/Request.cs @@ -9,6 +9,8 @@ namespace SlackAPI { + + class RequestState where K : Response { @@ -69,7 +71,7 @@ internal void GotResponse(IAsyncResult result) { try { - response = (HttpWebResponse)request.EndGetResponse(result); + response = (HttpWebResponse)request?.EndGetResponse(result); Success = true; } catch (WebException we) @@ -77,11 +79,8 @@ internal void GotResponse(IAsyncResult result) // If we don't get a response, let the exception bubble up as we can't do anything if (we.Response == null) { - var defaultResponse = default(K); - defaultResponse.ok = false; - defaultResponse.error = we.ToString(); - if (callback != null) - callback(defaultResponse); + var defaultResponse = CreateDefaultResponseForError(we); + callback?.Invoke((K)defaultResponse); return; } @@ -89,19 +88,49 @@ internal void GotResponse(IAsyncResult result) response = (HttpWebResponse)we.Response; //TODO: Handle timeouts, etc? } - + catch (Exception e) + { + var defaultResponse = CreateDefaultResponseForError(e); + callback?.Invoke((K)defaultResponse); + return; + } K responseObj; - - using (Stream responseReading = response.GetResponseStream()) - using (StreamReader reader = new StreamReader(responseReading)) + if (response == null) + { + responseObj = (K)CreateDefaultResponseForError(new Exception("Empty response")); + callback?.Invoke(responseObj); + return; + } + + try + { + using (Stream responseReading = response.GetResponseStream()) + using (StreamReader reader = new StreamReader(responseReading)) + { + string responseData = reader.ReadToEnd(); + responseObj = responseData.Deserialize(); + } + } + catch (Exception e) { - string responseData = reader.ReadToEnd(); - responseObj = responseData.Deserialize(); + responseObj = (K)CreateDefaultResponseForError(e); } - if(callback != null) - callback(responseObj); + callback?.Invoke(responseObj); + } + + private Response CreateDefaultResponseForError(Exception e) + { + var defaultResponse = new DefaultResponse(); + defaultResponse.ok = false; + defaultResponse.error = e.ToString(); + return defaultResponse; + } + + class DefaultResponse: Response + { + } } From 99890d5fb14ec741f356d1c044310f1fe3b6c9a7 Mon Sep 17 00:00:00 2001 From: Ilya Zimin Date: Fri, 17 Nov 2017 13:50:17 +0300 Subject: [PATCH 3/3] fix nre - https://github.com/Inumedia/SlackAPI/issues/109 --- SlackAPI/Request.cs | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/SlackAPI/Request.cs b/SlackAPI/Request.cs index ba634d3..2af5854 100644 --- a/SlackAPI/Request.cs +++ b/SlackAPI/Request.cs @@ -80,7 +80,7 @@ internal void GotResponse(IAsyncResult result) if (we.Response == null) { var defaultResponse = CreateDefaultResponseForError(we); - callback?.Invoke((K)defaultResponse); + callback?.Invoke(defaultResponse); return; } @@ -91,14 +91,14 @@ internal void GotResponse(IAsyncResult result) catch (Exception e) { var defaultResponse = CreateDefaultResponseForError(e); - callback?.Invoke((K)defaultResponse); + callback?.Invoke(defaultResponse); return; } K responseObj; if (response == null) { - responseObj = (K)CreateDefaultResponseForError(new Exception("Empty response")); + responseObj = CreateDefaultResponseForError(new Exception("Empty response")); callback?.Invoke(responseObj); return; } @@ -114,24 +114,19 @@ internal void GotResponse(IAsyncResult result) } catch (Exception e) { - responseObj = (K)CreateDefaultResponseForError(e); + responseObj = CreateDefaultResponseForError(e); } callback?.Invoke(responseObj); } - private Response CreateDefaultResponseForError(Exception e) + private K CreateDefaultResponseForError(Exception e) { - var defaultResponse = new DefaultResponse(); + var defaultResponse = (K)Activator.CreateInstance(); defaultResponse.ok = false; defaultResponse.error = e.ToString(); return defaultResponse; } - - class DefaultResponse: Response - { - - } } [AttributeUsage(AttributeTargets.Class, Inherited=false)]