From 4e0e254061e98bd076a57b812cea01b97a402df6 Mon Sep 17 00:00:00 2001 From: Adam Gauthier Date: Sat, 18 Dec 2021 01:04:47 -0800 Subject: [PATCH] Fix NRE on http error handling In some cases, the code is not able to deserialize API.DiscordError, but it attempts to use its message to throw an exception. This change uses null as the exception reason in that case. --- .../Net/Queue/RequestQueueBucket.cs | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs b/src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs index d9f4ba57a..2921678f7 100644 --- a/src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs +++ b/src/Discord.Net.Rest/Net/Queue/RequestQueueBucket.cs @@ -1,6 +1,4 @@ -using Discord.API; using Newtonsoft.Json; -using Newtonsoft.Json.Linq; using System; #if DEBUG_LIMITS using System.Diagnostics; @@ -106,17 +104,22 @@ namespace Discord.Net.Queue { try { - using (var reader = new StreamReader(response.Stream)) - using (var jsonReader = new JsonTextReader(reader)) - { - error = Discord.Rest.DiscordRestClient.Serializer.Deserialize(jsonReader); - } + using var reader = new StreamReader(response.Stream); + using var jsonReader = new JsonTextReader(reader); + + error = Discord.Rest.DiscordRestClient.Serializer.Deserialize(jsonReader); } catch { } } - throw new HttpException(response.StatusCode, request, error?.Code, error.Message, error.Errors.IsSpecified - ? error.Errors.Value.Select(x => new DiscordJsonError(x.Name.GetValueOrDefault("root"), x.Errors.Select(y => new DiscordError(y.Code, y.Message)).ToArray())).ToArray() - : null); + throw new HttpException( + response.StatusCode, + request, + error?.Code, + error?.Message, + error?.Errors.IsSpecified == true ? + error.Errors.Value.Select(x => new DiscordJsonError(x.Name.GetValueOrDefault("root"), x.Errors.Select(y => new DiscordError(y.Code, y.Message)).ToArray())).ToArray() : + null + ); } } else