From bb9c43b21ada1955cdbc67f07c04c20804e85f4e Mon Sep 17 00:00:00 2001 From: ObsidianMinor Date: Mon, 7 Nov 2016 13:42:25 -0600 Subject: [PATCH 1/2] Update RequestQueueBucket.cs Access "Date" in response header safely with TryGetValue. Hopefully nothing bad happens when lag is 0 --- src/Discord.Net.Core/Net/Queue/RequestQueueBucket.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Discord.Net.Core/Net/Queue/RequestQueueBucket.cs b/src/Discord.Net.Core/Net/Queue/RequestQueueBucket.cs index b750afbf6..755c4e5ca 100644 --- a/src/Discord.Net.Core/Net/Queue/RequestQueueBucket.cs +++ b/src/Discord.Net.Core/Net/Queue/RequestQueueBucket.cs @@ -49,7 +49,9 @@ namespace Discord.Net.Queue Debug.WriteLine($"[{id}] Sending..."); var response = await request.SendAsync().ConfigureAwait(false); - TimeSpan lag = DateTimeOffset.UtcNow - DateTimeOffset.Parse(response.Headers["Date"]); + string headerDate; + bool headerHasDate = response.Headers.TryGetValue("Date", out headerDate); + TimeSpan lag = DateTimeOffset.UtcNow - (headerHasDate ? DateTimeOffset.Parse(headerDate) : DateTimeOffset.UtcNow); var info = new RateLimitInfo(response.Headers); if (response.StatusCode < (HttpStatusCode)200 || response.StatusCode >= (HttpStatusCode)300) @@ -236,4 +238,4 @@ namespace Discord.Net.Queue } } } -} \ No newline at end of file +} From 29c9ac9ef3cba5ca8af90cd1fde78686cd32be8b Mon Sep 17 00:00:00 2001 From: ObsidianMinor Date: Thu, 10 Nov 2016 21:21:21 -0600 Subject: [PATCH 2/2] Reverted old code and added simple IgnoreCase to header dictionary --- src/Discord.Net.Core/Net/Queue/RequestQueueBucket.cs | 4 +--- src/Discord.Net.Core/Net/Rest/DefaultRestClient.cs | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Discord.Net.Core/Net/Queue/RequestQueueBucket.cs b/src/Discord.Net.Core/Net/Queue/RequestQueueBucket.cs index 755c4e5ca..6933730ff 100644 --- a/src/Discord.Net.Core/Net/Queue/RequestQueueBucket.cs +++ b/src/Discord.Net.Core/Net/Queue/RequestQueueBucket.cs @@ -49,9 +49,7 @@ namespace Discord.Net.Queue Debug.WriteLine($"[{id}] Sending..."); var response = await request.SendAsync().ConfigureAwait(false); - string headerDate; - bool headerHasDate = response.Headers.TryGetValue("Date", out headerDate); - TimeSpan lag = DateTimeOffset.UtcNow - (headerHasDate ? DateTimeOffset.Parse(headerDate) : DateTimeOffset.UtcNow); + TimeSpan lag = DateTimeOffset.UtcNow - DateTimeOffset.Parse(response.Headers["Date"]); var info = new RateLimitInfo(response.Headers); if (response.StatusCode < (HttpStatusCode)200 || response.StatusCode >= (HttpStatusCode)300) diff --git a/src/Discord.Net.Core/Net/Rest/DefaultRestClient.cs b/src/Discord.Net.Core/Net/Rest/DefaultRestClient.cs index 5ec30c750..588785230 100644 --- a/src/Discord.Net.Core/Net/Rest/DefaultRestClient.cs +++ b/src/Discord.Net.Core/Net/Rest/DefaultRestClient.cs @@ -120,7 +120,7 @@ namespace Discord.Net.Rest cancelToken = CancellationTokenSource.CreateLinkedTokenSource(_cancelToken, cancelToken).Token; HttpResponseMessage response = await _client.SendAsync(request, cancelToken).ConfigureAwait(false); - var headers = response.Headers.ToDictionary(x => x.Key, x => x.Value.FirstOrDefault()); + var headers = response.Headers.ToDictionary(x => x.Key, x => x.Value.FirstOrDefault(), StringComparer.OrdinalIgnoreCase); var stream = !headerOnly ? await response.Content.ReadAsStreamAsync().ConfigureAwait(false) : null; return new RestResponse(response.StatusCode, headers, stream);