Skip to content
This repository was archived by the owner on Dec 24, 2022. It is now read-only.

Commit 445f5a2

Browse files
committed
Escape unsafe strings before decoding byte[], and added a test that otherwise fails.
1 parent 08e1696 commit 445f5a2

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

tests/ServiceStack.Text.Tests/DataContractTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,13 @@ public class ClassFour
195195
public string Title;
196196
}
197197

198+
[DataContract]
199+
public class ClassFive
200+
{
201+
[DataMember(Name = "some-bytes")]
202+
public byte[] Bytes;
203+
}
204+
198205
[Test]
199206
public void Csv_Serialize_Should_Respects_DataContract_Name()
200207
{
@@ -244,6 +251,13 @@ public void Json_Serialize_Should_Respects_DataContract_Name()
244251
Is.EqualTo("{\"Id\":1,\"listClassTwo\":[{\"NewName\":\"Name One\"},{\"NewName\":\"Name Two\"}]}"));
245252
}
246253

254+
[Test]
255+
public void Json_Serialize_Should_Respects_DataContract_Field_Name_With_Bytes_Deserialize()
256+
{
257+
var t = JsonSerializer.DeserializeFromString<ClassFive>("{\"some-bytes\": \"YWI=\"}");
258+
Assert.IsTrue (t.Bytes.AreEqual (new byte[] { 0x61, 0x62 }));
259+
}
260+
247261
[Test]
248262
public void Can_get_weak_DataMember()
249263
{

tests/ServiceStack.Text.Tests/JsonObjectTests.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,29 @@ namespace ServiceStack.Text.Tests
55
[TestFixture]
66
public class JsonObjectTests : TestBase
77
{
8-
private const string JsonCentroid = @"{""place"":{ ""woeid"":12345, ""placeTypeName"":""St\\ate"" } }";
8+
private const string JsonCentroid = @"{""place"":{ ""woeid"":12345, ""placeTypeName"":""St\\a\/te"" } }";
99

1010
[Test]
1111
public void Can_dynamically_parse_JSON_with_escape_chars()
1212
{
1313
var placeTypeName = JsonObject.Parse(JsonCentroid).Object("place").Get("placeTypeName");
14-
Assert.That(placeTypeName, Is.EqualTo("St\\ate"));
14+
Assert.That(placeTypeName, Is.EqualTo("St\\a/te"));
1515

1616
placeTypeName = JsonObject.Parse(JsonCentroid).Object("place").Get<string>("placeTypeName");
17-
Assert.That(placeTypeName, Is.EqualTo("St\\ate"));
17+
Assert.That(placeTypeName, Is.EqualTo("St\\a/te"));
18+
}
19+
20+
private const string JsonEscapedByteArray = @"{""universalId"":""09o4bFTeBq3hTKhoJVCkzSLRG\/o1SktTPqxgZ3L3Xss=""}";
21+
22+
[Test]
23+
public void Can_dynamically_parse_JSON_with_escape_byte_array()
24+
{
25+
var parsed = JsonObject.Parse(JsonEscapedByteArray).Get<byte[]>("universalId");
26+
Assert.That(parsed, Is.EqualTo(new byte[] {
27+
0xd3, 0xda, 0x38, 0x6c, 0x54, 0xde, 0x06, 0xad,
28+
0xe1, 0x4c, 0xa8, 0x68, 0x25, 0x50, 0xa4, 0xcd,
29+
0x22, 0xd1, 0x1b, 0xfa, 0x35, 0x4a, 0x4b, 0x53,
30+
0x3e, 0xac, 0x60, 0x67, 0x72, 0xf7, 0x5e, 0xcb}));
1831
}
1932

2033
[Test]

0 commit comments

Comments
 (0)