diff --git a/src/Discord.Net.Core/Utils/TokenUtils.cs b/src/Discord.Net.Core/Utils/TokenUtils.cs index 8e533bcfa..f57a3ccac 100644 --- a/src/Discord.Net.Core/Utils/TokenUtils.cs +++ b/src/Discord.Net.Core/Utils/TokenUtils.cs @@ -1,4 +1,5 @@ using System; +using System.Text; namespace Discord { @@ -41,10 +42,10 @@ namespace Discord try { // decode the first segment as base64 - var v = Convert.FromBase64String(segments[0]); - BitConverter.ToUInt64(v, 0); - // if no exception thrown, token is valid - return true; + var bytes = Convert.FromBase64String(segments[0]); + var idStr = Encoding.UTF8.GetString(bytes); + // discard id + return ulong.TryParse(idStr, out var id); } catch (FormatException) { diff --git a/test/Discord.Net.Tests/Tests.TokenUtils.cs b/test/Discord.Net.Tests/Tests.TokenUtils.cs index 1348b7744..317b8c719 100644 --- a/test/Discord.Net.Tests/Tests.TokenUtils.cs +++ b/test/Discord.Net.Tests/Tests.TokenUtils.cs @@ -138,6 +138,7 @@ namespace Discord [InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4. this part is invalid. this part is also invalid", true)] [InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4.", false)] [InlineData("MTk4NjIyNDgzNDcxOTI1MjQ4", false)] + [InlineData("NDI4NDc3OTQ0MDA5MTk1NTIw.xxxx.xxxxx", true)] // should not throw an unexpected exception [InlineData("", false)] [InlineData(null, false)]