diff --git a/Greenshot/Help/HelpFileLoader.cs b/Greenshot/Help/HelpFileLoader.cs
index 93759a850..c3acda86d 100644
--- a/Greenshot/Help/HelpFileLoader.cs
+++ b/Greenshot/Help/HelpFileLoader.cs
@@ -83,10 +83,15 @@ namespace Greenshot.Help
private static HttpStatusCode? GetHttpStatus(string url) {
try {
HttpWebRequest req = NetworkHelper.CreateWebRequest(url);
- HttpWebResponse res = (HttpWebResponse)req.GetResponse();
- return res.StatusCode;
- } catch(WebException e) {
- if(e.Response != null) return ((HttpWebResponse)e.Response).StatusCode;
+ using (HttpWebResponse res = (HttpWebResponse)req.GetResponse())
+ {
+ return res.StatusCode;
+ }
+ } catch (WebException e) {
+ if (e.Response != null)
+ {
+ return ((HttpWebResponse)e.Response).StatusCode;
+ }
return null;
}
}
diff --git a/GreenshotPlugin/Core/NetworkHelper.cs b/GreenshotPlugin/Core/NetworkHelper.cs
index 0acf63bf3..429265834 100644
--- a/GreenshotPlugin/Core/NetworkHelper.cs
+++ b/GreenshotPlugin/Core/NetworkHelper.cs
@@ -77,12 +77,18 @@ namespace GreenshotPlugin.Core {
Uri url = new Uri(baseUri, new Uri("favicon.ico"));
try {
HttpWebRequest request = CreateWebRequest(url);
- HttpWebResponse response = (HttpWebResponse)request.GetResponse();
- if (request.HaveResponse) {
- using (Stream responseStream = response.GetResponseStream()) {
- if (responseStream != null) {
- using (Image image = Image.FromStream(responseStream)) {
- return (image.Height > 16 && image.Width > 16) ? new Bitmap(image, 16, 16) : new Bitmap(image);
+ using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
+ {
+ if (request.HaveResponse)
+ {
+ using (Stream responseStream = response.GetResponseStream())
+ {
+ if (responseStream != null)
+ {
+ using (Image image = Image.FromStream(responseStream))
+ {
+ return (image.Height > 16 && image.Width > 16) ? new Bitmap(image, 16, 16) : new Bitmap(image);
+ }
}
}
}
@@ -424,6 +430,32 @@ namespace GreenshotPlugin.Core {
return GetResponseAsString(webRequest, false);
}
+ ///
+ /// Read the response as string
+ ///
+ ///
+ /// string or null
+ private static string GetResponseAsString(HttpWebResponse response)
+ {
+ string responseData = null;
+ if (response == null)
+ {
+ return null;
+ }
+ using (response)
+ {
+ Stream responseStream = response.GetResponseStream();
+ if (responseStream != null)
+ {
+ using (StreamReader reader = new StreamReader(responseStream, true))
+ {
+ responseData = reader.ReadToEnd();
+ }
+ }
+ }
+ return responseData;
+ }
+
///
///
///
@@ -431,40 +463,43 @@ namespace GreenshotPlugin.Core {
///
public static string GetResponseAsString(HttpWebRequest webRequest, bool alsoReturnContentOnError) {
string responseData = null;
- try {
- HttpWebResponse response = (HttpWebResponse) webRequest.GetResponse();
+ HttpWebResponse response = null;
+ bool isHttpError = false;
+ try {
+ response = (HttpWebResponse)webRequest.GetResponse();
LOG.InfoFormat("Response status: {0}", response.StatusCode);
- bool isHttpError = (int) response.StatusCode >= 300;
- DebugHeaders(response);
- Stream responseStream = response.GetResponseStream();
- if (responseStream != null) {
- using (StreamReader reader = new StreamReader(responseStream, true)) {
- responseData = reader.ReadToEnd();
- }
- if (isHttpError) {
- LOG.ErrorFormat("HTTP error {0} with content: {1}", response.StatusCode, responseData);
- }
+ isHttpError = (int)response.StatusCode >= 300;
+ if (isHttpError)
+ {
+ LOG.ErrorFormat("HTTP error {0} with content: {1}", response.StatusCode, responseData);
}
- } catch (WebException e) {
- HttpWebResponse response = (HttpWebResponse) e.Response;
+ DebugHeaders(response);
+ responseData = GetResponseAsString(response);
+ } catch (WebException e) {
+ response = (HttpWebResponse) e.Response;
if (response != null) {
LOG.ErrorFormat("HTTP error {0}", response.StatusCode);
- using (Stream responseStream = response.GetResponseStream()) {
- if (responseStream != null) {
- using (StreamReader streamReader = new StreamReader(responseStream, true)) {
- string errorContent = streamReader.ReadToEnd();
- if (alsoReturnContentOnError) {
- return errorContent;
- }
- LOG.ErrorFormat("Content: {0}", errorContent);
- }
- }
+ string errorContent = GetResponseAsString(response);
+ if (alsoReturnContentOnError)
+ {
+ return errorContent;
}
+ LOG.ErrorFormat("Content: {0}", errorContent);
}
LOG.Error("WebException: ", e);
throw;
}
-
+ finally
+ {
+ if (response != null)
+ {
+ if (isHttpError)
+ {
+ LOG.ErrorFormat("HTTP error {0} with content: {1}", response.StatusCode, responseData);
+ }
+ response.Close();
+ }
+ }
return responseData;
}
@@ -477,9 +512,11 @@ namespace GreenshotPlugin.Core {
try {
HttpWebRequest webRequest = CreateWebRequest(uri);
webRequest.Method = HTTPMethod.HEAD.ToString();
- HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
- LOG.DebugFormat("RSS feed was updated at {0}", webResponse.LastModified);
- return webResponse.LastModified;
+ using (HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse())
+ {
+ LOG.DebugFormat("RSS feed was updated at {0}", webResponse.LastModified);
+ return webResponse.LastModified;
+ }
} catch (Exception wE) {
LOG.WarnFormat("Problem requesting HTTP - HEAD on uri {0}", uri);
LOG.Warn(wE.Message);