Skip to content

Commit 398645f

Browse files
committed
TruncatedCharErrorScalarUTF16 pass
1 parent 318e3cf commit 398645f

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

src/Base64Scalar.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,12 @@ public unsafe static OperationStatus DecodeFromBase64Scalar(ReadOnlySpan<byte> s
205205
}
206206

207207

208+
public static bool IsValidBase64Index(char b)
209+
{
210+
// Assume d0 to d3 are sized 256, replace with actual valid range if different
211+
return b < 256;
212+
}
213+
208214

209215
public unsafe static OperationStatus DecodeFromBase64Scalar(ReadOnlySpan<char> source, Span<byte> dest, out int bytesConsumed, out int bytesWritten, bool isUrl = false)
210216
{
@@ -233,6 +239,8 @@ public unsafe static OperationStatus DecodeFromBase64Scalar(ReadOnlySpan<char> s
233239
{
234240
// fastpath
235241
while (src + 4 <= srcEnd &&
242+
IsValidBase64Index(*src) && IsValidBase64Index(src[1]) &&
243+
IsValidBase64Index(src[2]) && IsValidBase64Index(src[3]) &&
236244
(x = d0[*src] | d1[src[1]] | d2[src[2]] | d3[src[3]]) < 0x01FFFFFF)
237245
{
238246
if (MatchSystem(Endianness.BIG))
@@ -250,7 +258,16 @@ public unsafe static OperationStatus DecodeFromBase64Scalar(ReadOnlySpan<char> s
250258
while (idx < 4 && src < srcEnd)
251259
{
252260
char c = (char)*src;
261+
if (!IsValidBase64Index(c)) // Ensure c is a valid index
262+
{
263+
bytesConsumed = (int)(src - srcInit);
264+
bytesWritten = (int)(dst - dstInit);
265+
266+
return OperationStatus.InvalidData;
267+
// Process code
268+
}
253269
byte code = toBase64[c];
270+
// byte code = 1;
254271
buffer[idx] = code;
255272

256273
if (code <= 63)

0 commit comments

Comments
 (0)