@@ -13,6 +13,8 @@ public class Utf8ValidationTests
13
13
[ InlineData ( new byte [ ] { } ) ]
14
14
[ InlineData ( new byte [ ] { 0x48 , 0x65 , 0x6C , 0x6C , 0x6F , 0x20 , 0x57 , 0x6F , 0x72 , 0x6C , 0x64 } ) ] // Hello World
15
15
[ InlineData ( new byte [ ] { 0x48 , 0x65 , 0x6C , 0x6C , 0x6F , 0x2D , 0xC2 , 0xB5 , 0x40 , 0xC3 , 0x9F , 0xC3 , 0xB6 , 0xC3 , 0xA4 , 0xC3 , 0xBC , 0xC3 , 0xA0 , 0xC3 , 0xA1 } ) ] // "Hello-µ@ßöäüàá";
16
+ // [InlineData(new byte[] { 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0xf0, 0xa4, 0xad, 0xa2, 0x77, 0x6f, 0x72, 0x6c, 0x64 })] // "hello\U00024b62world"
17
+ [ InlineData ( new byte [ ] { 0xf0 , 0xa4 , 0xad , 0xa2 } ) ] // "\U00024b62"
16
18
public void ValidateSingleValidSegments_Valid ( byte [ ] data )
17
19
{
18
20
var state = new Utilities . Utf8MessageState ( ) ;
@@ -35,28 +37,39 @@ public void ValidateMultipleValidSegments_Valid(byte[] data1, byte[] data2, byte
35
37
[ InlineData ( new byte [ ] { 0xfe } ) ]
36
38
[ InlineData ( new byte [ ] { 0xff } ) ]
37
39
[ InlineData ( new byte [ ] { 0xfe , 0xfe , 0xff , 0xff } ) ]
38
- // [InlineData(new byte[] { 0xc0, 0xaf })]
39
- // [InlineData(new byte[] { 0xe0, 0x80, 0xaf })]
40
- // [InlineData(new byte[] { 0xf4, 0x90, 0x80, 0x80 })]
41
- // [InlineData(new byte[] { 0xf0, 0x80, 0x80, 0xaf })]
42
- // [InlineData(new byte[] { 0xf8, 0x80, 0x80, 0x80, 0xaf })]
43
- // [InlineData(new byte[] { 0xfc, 0x80, 0x80, 0x80, 0x80, 0xaf })]
44
- // [InlineData(new byte[] { 0xc1, 0xbf })]
45
- // [InlineData(new byte[] { 0xed, 0xa0, 0x80, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64 })] // 0xEDA080 decodes to 0xD800, which is a reserved high surrogate character.
40
+ [ InlineData ( new byte [ ] { 0xc0 , 0xb1 } ) ] // Overlong Ascii
41
+ [ InlineData ( new byte [ ] { 0xc1 , 0xb1 } ) ] // Overlong Ascii
42
+ [ InlineData ( new byte [ ] { 0xe0 , 0x80 , 0xaf } ) ] // Overlong
43
+ [ InlineData ( new byte [ ] { 0xf0 , 0x80 , 0x80 , 0xaf } ) ] // Overlong
44
+ [ InlineData ( new byte [ ] { 0xf8 , 0x80 , 0x80 , 0x80 , 0xaf } ) ] // Overlong
45
+ [ InlineData ( new byte [ ] { 0xfc , 0x80 , 0x80 , 0x80 , 0x80 , 0xaf } ) ] // Overlong
46
+ [ InlineData ( new byte [ ] { 0xed , 0xa0 , 0x80 , 0x65 , 0x64 , 0x69 , 0x74 , 0x65 , 0x64 } ) ] // 0xEDA080 decodes to 0xD800, which is a reserved high surrogate character.
46
47
public void ValidateSingleInvalidSegment_Invalid ( byte [ ] data )
47
48
{
48
49
var state = new Utilities . Utf8MessageState ( ) ;
49
50
Assert . False ( Utilities . TryValidateUtf8 ( new ArraySegment < byte > ( data ) , endOfMessage : true , state : state ) ) ;
50
51
}
51
- /*
52
- [Theory]
53
- // [InlineData(true, new byte[] { 0xce, 0xba, 0xe1, 0xbd, 0xb9, 0xcf, 0x83, 0xce, 0xbc, 0xce, 0xb5, 0xf4 }, false, new byte[] { 0x90 }, true, new byte[] { })]
54
- public void ValidateMultipleInvalidSegments_Invalid(bool valid1, byte[] data1, bool valid2, byte[] data2, bool valid3, byte[] data3)
52
+
53
+ [ Fact ]
54
+ public void ValidateIndividualInvalidSegments_Invalid ( )
55
55
{
56
+ var data = new byte [ ] { 0xce , 0xba , 0xe1 , 0xbd , 0xb9 , 0xcf , 0x83 , 0xce , 0xbc , 0xce , 0xb5 , 0xed , 0xa0 , 0x80 , 0x65 , 0x64 , 0x69 , 0x74 , 0x65 , 0x64 } ;
56
57
var state = new Utilities . Utf8MessageState ( ) ;
57
- Assert.True(valid1 == Utilities.TryValidateUtf8(new ArraySegment<byte>(data1), endOfMessage: false, state: state), "1st");
58
- Assert.True(valid2 == Utilities.TryValidateUtf8(new ArraySegment<byte>(data2), endOfMessage: false, state: state), "2nd");
59
- Assert.True(valid3 == Utilities.TryValidateUtf8(new ArraySegment<byte>(data3), endOfMessage: true, state: state), "3rd");
60
- }*/
58
+ for ( int i = 0 ; i < 12 ; i ++ )
59
+ {
60
+ Assert . True ( Utilities . TryValidateUtf8 ( new ArraySegment < byte > ( data , i , 1 ) , endOfMessage : false , state : state ) , i . ToString ( ) ) ;
61
+ }
62
+ Assert . False ( Utilities . TryValidateUtf8 ( new ArraySegment < byte > ( data , 12 , 1 ) , endOfMessage : false , state : state ) , 12 . ToString ( ) ) ;
63
+ }
64
+
65
+ [ Fact ]
66
+ public void ValidateMultipleInvalidSegments_Invalid ( )
67
+ {
68
+ var data0 = new byte [ ] { 0xce , 0xba , 0xe1 , 0xbd , 0xb9 , 0xcf , 0x83 , 0xce , 0xbc , 0xce , 0xb5 , 0xf4 } ;
69
+ var data1 = new byte [ ] { 0x90 } ;
70
+ var state = new Utilities . Utf8MessageState ( ) ;
71
+ Assert . True ( Utilities . TryValidateUtf8 ( new ArraySegment < byte > ( data0 ) , endOfMessage : false , state : state ) ) ;
72
+ Assert . False ( Utilities . TryValidateUtf8 ( new ArraySegment < byte > ( data1 ) , endOfMessage : false , state : state ) ) ;
73
+ }
61
74
}
62
75
}
0 commit comments