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:
committed by
Mikko Rantanen
parent
e2dc61b8f3
commit
b47f7440d1
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user