Skip to content

Commit 4197abb

Browse files
stephentoubbrentschmaltz
authored andcommitted
Fix replacement loop in Base64UrlEncoder.UnsafeDecode (#2190)
It was doing unnecessary work by starting the search from the beginning each time.
1 parent bc74959 commit 4197abb

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

src/Microsoft.IdentityModel.Tokens/Base64UrlEncoder.cs

+4-2
Original file line numberDiff line numberDiff line change
@@ -207,10 +207,12 @@ internal static unsafe byte[] UnsafeDecode(ReadOnlyMemory<char> str)
207207

208208
if (needReplace)
209209
{
210+
Span<char> remaining = charsSpan;
210211
int pos;
211-
while ((pos = charsSpan.IndexOfAny(base64UrlCharacter62, base64UrlCharacter63)) >= 0)
212+
while ((pos = remaining.IndexOfAny(base64UrlCharacter62, base64UrlCharacter63)) >= 0)
212213
{
213-
charsSpan[pos] = charsSpan[pos] == base64UrlCharacter62 ? base64Character62 : base64Character63;
214+
remaining[pos] = (remaining[pos] == base64UrlCharacter62) ? base64Character62 : base64Character63;
215+
remaining = remaining.Slice(pos + 1);
214216
}
215217
}
216218

0 commit comments

Comments
 (0)