-Fixed overflow when converting incomplete JSON to XML
This commit is contained in:
@@ -916,6 +916,16 @@ namespace Newtonsoft.Json.Tests.Converters
|
||||
Assert.AreEqual(doc.InnerXml, deserializedDoc.InnerXml);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void FailOnIncomplete()
|
||||
{
|
||||
string json = @"{'Row' : ";
|
||||
|
||||
ExceptionAssert.Throws<JsonSerializationException>(
|
||||
() => JsonConvert.DeserializeXmlNode(json, "ROOT"),
|
||||
"Unexpected end when reading JSON. Path 'Row', line 1, position 9.");
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DocumentDeserialize()
|
||||
{
|
||||
|
||||
@@ -367,109 +367,6 @@ namespace Newtonsoft.Json.Tests.Schema
|
||||
return c;
|
||||
}
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void GenerateSchemaForDirectoryInfo()
|
||||
{
|
||||
JsonSchemaGenerator generator = new JsonSchemaGenerator();
|
||||
generator.UndefinedSchemaIdHandling = UndefinedSchemaIdHandling.UseTypeName;
|
||||
generator.ContractResolver = new CustomDirectoryInfoMapper
|
||||
{
|
||||
#if !(PORTABLE || DNXCORE50)
|
||||
IgnoreSerializableAttribute = true
|
||||
#endif
|
||||
};
|
||||
|
||||
JsonSchema schema = generator.Generate(typeof(DirectoryInfo), true);
|
||||
|
||||
string json = schema.ToString();
|
||||
|
||||
StringAssert.AreEqual(@"{
|
||||
""id"": ""System.IO.DirectoryInfo"",
|
||||
""required"": true,
|
||||
""type"": [
|
||||
""object"",
|
||||
""null""
|
||||
],
|
||||
""additionalProperties"": false,
|
||||
""properties"": {
|
||||
""Name"": {
|
||||
""required"": true,
|
||||
""type"": [
|
||||
""string"",
|
||||
""null""
|
||||
]
|
||||
},
|
||||
""Parent"": {
|
||||
""$ref"": ""System.IO.DirectoryInfo""
|
||||
},
|
||||
""Exists"": {
|
||||
""required"": true,
|
||||
""type"": ""boolean""
|
||||
},
|
||||
""FullName"": {
|
||||
""required"": true,
|
||||
""type"": [
|
||||
""string"",
|
||||
""null""
|
||||
]
|
||||
},
|
||||
""Extension"": {
|
||||
""required"": true,
|
||||
""type"": [
|
||||
""string"",
|
||||
""null""
|
||||
]
|
||||
},
|
||||
""CreationTime"": {
|
||||
""required"": true,
|
||||
""type"": ""string""
|
||||
},
|
||||
""CreationTimeUtc"": {
|
||||
""required"": true,
|
||||
""type"": ""string""
|
||||
},
|
||||
""LastAccessTime"": {
|
||||
""required"": true,
|
||||
""type"": ""string""
|
||||
},
|
||||
""LastAccessTimeUtc"": {
|
||||
""required"": true,
|
||||
""type"": ""string""
|
||||
},
|
||||
""LastWriteTime"": {
|
||||
""required"": true,
|
||||
""type"": ""string""
|
||||
},
|
||||
""LastWriteTimeUtc"": {
|
||||
""required"": true,
|
||||
""type"": ""string""
|
||||
},
|
||||
""Attributes"": {
|
||||
""required"": true,
|
||||
""type"": ""integer""
|
||||
}
|
||||
}
|
||||
}", json);
|
||||
|
||||
DirectoryInfo temp = new DirectoryInfo(@"c:\temp");
|
||||
|
||||
JTokenWriter jsonWriter = new JTokenWriter();
|
||||
JsonSerializer serializer = new JsonSerializer();
|
||||
serializer.Converters.Add(new IsoDateTimeConverter());
|
||||
serializer.ContractResolver = new CustomDirectoryInfoMapper
|
||||
{
|
||||
#if !(PORTABLE || DNXCORE50)
|
||||
IgnoreSerializableInterface = true
|
||||
#endif
|
||||
};
|
||||
serializer.Serialize(jsonWriter, temp);
|
||||
|
||||
List<string> errors = new List<string>();
|
||||
jsonWriter.Token.Validate(schema, (sender, args) => errors.Add(args.Message));
|
||||
|
||||
Assert.AreEqual(0, errors.Count);
|
||||
}
|
||||
#endif
|
||||
|
||||
[Test]
|
||||
|
||||
@@ -1667,7 +1667,7 @@ namespace Newtonsoft.Json.Converters
|
||||
}
|
||||
else
|
||||
{
|
||||
reader.Read();
|
||||
reader.ReadAndAssert();
|
||||
DeserializeNode(reader, document, manager, rootNode);
|
||||
}
|
||||
|
||||
@@ -1979,7 +1979,7 @@ namespace Newtonsoft.Json.Converters
|
||||
}
|
||||
|
||||
attributeName = attributeName.Substring(1);
|
||||
reader.Read();
|
||||
reader.ReadAndAssert();
|
||||
attributeValue = ConvertTokenToXmlValue(reader);
|
||||
attributeNameValues.Add(attributeName, attributeValue);
|
||||
|
||||
@@ -2027,7 +2027,7 @@ namespace Newtonsoft.Json.Converters
|
||||
}
|
||||
|
||||
attributeName = attributeName.Substring(1);
|
||||
reader.Read();
|
||||
reader.ReadAndAssert();
|
||||
|
||||
if (!JsonTokenUtils.IsPrimitiveToken(reader.TokenType))
|
||||
{
|
||||
@@ -2082,15 +2082,15 @@ namespace Newtonsoft.Json.Converters
|
||||
switch (reader.Value.ToString())
|
||||
{
|
||||
case "@version":
|
||||
reader.Read();
|
||||
reader.ReadAndAssert();
|
||||
version = ConvertTokenToXmlValue(reader);
|
||||
break;
|
||||
case "@encoding":
|
||||
reader.Read();
|
||||
reader.ReadAndAssert();
|
||||
encoding = ConvertTokenToXmlValue(reader);
|
||||
break;
|
||||
case "@standalone":
|
||||
reader.Read();
|
||||
reader.ReadAndAssert();
|
||||
standalone = ConvertTokenToXmlValue(reader);
|
||||
break;
|
||||
default:
|
||||
@@ -2120,19 +2120,19 @@ namespace Newtonsoft.Json.Converters
|
||||
switch (reader.Value.ToString())
|
||||
{
|
||||
case "@name":
|
||||
reader.Read();
|
||||
reader.ReadAndAssert();
|
||||
name = ConvertTokenToXmlValue(reader);
|
||||
break;
|
||||
case "@public":
|
||||
reader.Read();
|
||||
reader.ReadAndAssert();
|
||||
publicId = ConvertTokenToXmlValue(reader);
|
||||
break;
|
||||
case "@system":
|
||||
reader.Read();
|
||||
reader.ReadAndAssert();
|
||||
systemId = ConvertTokenToXmlValue(reader);
|
||||
break;
|
||||
case "@internalSubset":
|
||||
reader.Read();
|
||||
reader.ReadAndAssert();
|
||||
internalSubset = ConvertTokenToXmlValue(reader);
|
||||
break;
|
||||
default:
|
||||
@@ -2168,7 +2168,7 @@ namespace Newtonsoft.Json.Converters
|
||||
}
|
||||
|
||||
string propertyName = reader.Value.ToString();
|
||||
reader.Read();
|
||||
reader.ReadAndAssert();
|
||||
|
||||
if (reader.TokenType == JsonToken.StartArray)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user