Skip to content

Commit a6739dc

Browse files
committed
Update invalid json test value, fix issue in Base64Url validation
1 parent 9efa0b9 commit a6739dc

File tree

4 files changed

+19
-17
lines changed

4 files changed

+19
-17
lines changed

src/libraries/System.Memory/tests/Base64/Base64DecoderUnitTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,8 @@ public void BasicDecodingWithNonZeroUnusedBits(string inputString)
285285
Span<byte> decodedBytes = new byte[Base64.GetMaxDecodedFromUtf8Length(source.Length)];
286286

287287
Assert.False(Base64.IsValid(inputString));
288-
Assert.Equal(OperationStatus.InvalidData, Base64.DecodeFromUtf8(source, decodedBytes, out int consumed, out int _));
288+
Assert.Equal(OperationStatus.InvalidData, Base64.DecodeFromUtf8(source, decodedBytes, out int _, out int _));
289+
Assert.Equal(OperationStatus.InvalidData, Base64.DecodeFromUtf8InPlace(source, out int _));
289290
}
290291

291292
[Theory]

src/libraries/System.Memory/tests/Base64Url/Base64UrlDecoderUnitTests.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -300,11 +300,12 @@ public void BasicDecodingWithFinalBlockTrueKnownInputDone(string inputString, in
300300
[InlineData("AQIDBAUHCAkKCwwNDxD")]
301301
public void BasicDecodingWithNonZeroUnusedBits(string inputString)
302302
{
303-
Span<byte> source = Encoding.ASCII.GetBytes(inputString);
303+
byte[] source = Encoding.ASCII.GetBytes(inputString);
304304
Span<byte> decodedBytes = new byte[Base64.GetMaxDecodedFromUtf8Length(source.Length)];
305305

306-
Assert.False(Base64.IsValid(inputString));
307-
Assert.Equal(OperationStatus.InvalidData, Base64.DecodeFromUtf8(source, decodedBytes, out int consumed, out int _));
306+
Assert.False(Base64Url.IsValid(inputString));
307+
Assert.Equal(OperationStatus.InvalidData, Base64Url.DecodeFromUtf8(source, decodedBytes, out int _, out int _));
308+
Assert.Throws<FormatException>(() => Base64Url.DecodeFromUtf8InPlace(source));
308309
}
309310

310311
[Theory]

src/libraries/System.Private.CoreLib/src/System/Buffers/Text/Base64Helper/Base64ValidatorHelper.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -108,19 +108,19 @@ internal static bool IsValid<T, TBase64Validatable>(TBase64Validatable validatab
108108
}
109109
}
110110

111-
int decoded = validatable.DecodeValue(lastChar);
112-
if (paddingCount == 1 && (decoded & 0x03) != 0 ||
113-
paddingCount == 2 && (decoded & 0x0F) != 0)
114-
{
115-
// unused lower bits are not 0, reject input
116-
decodedLength = 0;
117-
return false;
118-
}
119-
120111
length += paddingCount;
121112
break;
122113
}
123114

115+
int decoded = validatable.DecodeValue(lastChar);
116+
if (paddingCount == 1 && (decoded & 0x03) != 0 ||
117+
paddingCount == 2 && (decoded & 0x0F) != 0)
118+
{
119+
// unused lower bits are not 0, reject input
120+
decodedLength = 0;
121+
return false;
122+
}
123+
124124
if (!validatable.ValidateAndDecodeLength(length, paddingCount, out decodedLength))
125125
{
126126
goto Fail;

src/libraries/System.Text.Json/tests/System.Text.Json.Tests/JsonBase64TestData.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ internal class JsonBase64TestData
99
{
1010
public static IEnumerable<object[]> ValidBase64Tests()
1111
{
12-
yield return new object[] { "\"ABC=\"" };
12+
yield return new object[] { "\"ABA=\"" };
1313
yield return new object[] { "\"AB+D\"" };
1414
yield return new object[] { "\"ABCD\"" };
1515
yield return new object[] { "\"ABC/\"" };
@@ -19,9 +19,9 @@ public static IEnumerable<object[]> ValidBase64Tests()
1919

2020
public static IEnumerable<object[]> InvalidBase64Tests()
2121
{
22-
yield return new object[] { "\"ABC===\"" };
23-
yield return new object[] { "\"ABC\"" };
24-
yield return new object[] { "\"ABC!\"" };
22+
yield return new object[] { "\"ABA===\"" };
23+
yield return new object[] { "\"ABA\"" };
24+
yield return new object[] { "\"ABA!\"" };
2525
yield return new object[] { GenerateRandomInvalidLargeString(includeEscapedCharacter: true) };
2626
yield return new object[] { GenerateRandomInvalidLargeString(includeEscapedCharacter: false) };
2727
}

0 commit comments

Comments
 (0)