Fix null reference error when deserializing bytes

If the JSON contained empty object "{}" for a byte[] property, the `JsonReader` ended up trying to read the object content despite the fact that the content didn't exist. This caused a null reference exception.

The fix ensures the value exists before trying to read it. If the value doesn't exist, the execution ends up in "Unexpected token" exception with way more informative error message.
This commit is contained in:
Mikko Rantanen
2016-11-05 15:38:52 +02:00
committed by Mikko Rantanen
parent e2dc61b8f3
commit b47f7440d1
2 changed files with 10 additions and 2 deletions
@@ -384,6 +384,14 @@ namespace Newtonsoft.Json.Tests.JsonTextReaderTests
ExceptionAssert.Throws<JsonReaderException>(() => { reader.ReadAsBytes(); }, "Unexpected end when reading JSON. Path '', line 1, position 1.");
}
[Test]
public void ReadBytesEmptyWrappedObject()
{
JsonTextReader reader = new JsonTextReader(new StringReader(@"{}"));
ExceptionAssert.Throws<JsonReaderException>(() => { reader.ReadAsBytes(); }, "Error reading bytes. Unexpected token: StartObject. Path '', line 1, position 2." );
}
[Test]
public void ReadIntegerWithError()
{
+2 -2
View File
@@ -904,7 +904,7 @@ namespace Newtonsoft.Json
internal void ReadIntoWrappedTypeObject()
{
ReaderReadAndAssert();
if (Value.ToString() == JsonTypeReflector.TypePropertyName)
if (Value != null && Value.ToString() == JsonTypeReflector.TypePropertyName)
{
ReaderReadAndAssert();
if (Value != null && Value.ToString().StartsWith("System.Byte[]", StringComparison.Ordinal))
@@ -1182,4 +1182,4 @@ namespace Newtonsoft.Json
return t;
}
}
}
}