Skip to content

Commit b084524

Browse files
committed
Fixed base64url implementation, was missing a conversion
1 parent f8b2787 commit b084524

File tree

1 file changed

+17
-8
lines changed

1 file changed

+17
-8
lines changed

SpotifyAPI.Web/Util/Base64Util.cs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,20 @@ public static string UrlEncode(byte[] input)
2525
var buffer = new char[GetArraySizeRequiredToEncode(input.Length)];
2626
var numBase64Chars = Convert.ToBase64CharArray(input, 0, input.Length, buffer, 0);
2727

28+
// Fix up '+' -> '-' and '/' -> '_'. Drop padding characters.
29+
for (var i = 0; i < numBase64Chars; i++)
30+
{
31+
var ch = buffer[i];
32+
if (ch == '+')
33+
{
34+
buffer[i] = '-';
35+
}
36+
else if (ch == '/')
37+
{
38+
buffer[i] = '_';
39+
}
40+
}
41+
2842
return new string(buffer, startIndex: 0, length: numBase64Chars);
2943
}
3044

@@ -36,19 +50,14 @@ public static byte[] UrlDecode(string input)
3650
throw new ArgumentNullException(nameof(input));
3751
}
3852

39-
if (count == 0)
40-
{
41-
return Array.Empty<byte>();
42-
}
43-
4453
// Assumption: input is base64url encoded without padding and contains no whitespace.
4554

46-
var paddingCharsToAdd = GetNumBase64PaddingCharsToAddForDecode(count);
47-
var arraySizeRequired = checked(count + paddingCharsToAdd);
55+
var paddingCharsToAdd = GetNumBase64PaddingCharsToAddForDecode(input.Length);
56+
var arraySizeRequired = checked(input.Length + paddingCharsToAdd);
4857

4958
// Copy input into buffer, fixing up '-' -> '+' and '_' -> '/'.
5059
var i = 0;
51-
for (var j = 0; i < count; i++, j++)
60+
for (var j = 0; i < input.Length; i++, j++)
5261
{
5362
var ch = input[j];
5463
if (ch == '-')

0 commit comments

Comments
 (0)