diff --git a/Src/Newtonsoft.Json.Tests/JsonTextReaderTest.cs b/Src/Newtonsoft.Json.Tests/JsonTextReaderTest.cs index bceff741..47ee206f 100644 --- a/Src/Newtonsoft.Json.Tests/JsonTextReaderTest.cs +++ b/Src/Newtonsoft.Json.Tests/JsonTextReaderTest.cs @@ -2090,6 +2090,15 @@ third line", jsonTextReader.Value); } #endif + [Test] + public void ReadAsBooleanNoContent() + { + JsonTextReader reader = new JsonTextReader(new StringReader(@"")); + + Assert.IsNull(reader.ReadAsBoolean()); + Assert.AreEqual(JsonToken.None, reader.TokenType); + } + [Test] public void ReadAsDecimalBadContent() { @@ -3585,6 +3594,77 @@ null//comment ExceptionAssert.Throws(() => { reader.ReadAsBoolean(); }, "Unexpected end when reading JSON. Path '', line 1, position 3."); } + [Test] + public void ReadAsBoolean_NullChar() + { + string json = '\0' + @"true" + '\0' + '\0'; + + JsonTextReader reader = new JsonTextReader(new StringReader(json)); + + Assert.AreEqual(true, reader.ReadAsBoolean()); + Assert.AreEqual(null, reader.ReadAsBoolean()); + } + + [Test] + public void ReadAsBoolean_BadData() + { + string json = @"pie"; + + JsonTextReader reader = new JsonTextReader(new StringReader(json)); + + ExceptionAssert.Throws(() => { reader.ReadAsBoolean(); }, "Unexpected character encountered while parsing value: p. Path '', line 1, position 1."); + } + + [Test] + public void ReadAsString_BadData() + { + string json = @"pie"; + + JsonTextReader reader = new JsonTextReader(new StringReader(json)); + + ExceptionAssert.Throws(() => { reader.ReadAsString(); }, "Unexpected character encountered while parsing value: p. Path '', line 1, position 1."); + } + + [Test] + public void ReadAsDouble_BadData() + { + string json = @"pie"; + + JsonTextReader reader = new JsonTextReader(new StringReader(json)); + + ExceptionAssert.Throws(() => { reader.ReadAsDouble(); }, "Unexpected character encountered while parsing value: p. Path '', line 1, position 1."); + } + + [Test] + public void ReadAsDouble_Boolean() + { + string json = @"true"; + + JsonTextReader reader = new JsonTextReader(new StringReader(json)); + + ExceptionAssert.Throws(() => { reader.ReadAsDouble(); }, "Unexpected character encountered while parsing value: t. Path '', line 1, position 1."); + } + + [Test] + public void ReadAsBytes_BadData() + { + string json = @"pie"; + + JsonTextReader reader = new JsonTextReader(new StringReader(json)); + + ExceptionAssert.Throws(() => { reader.ReadAsBytes(); }, "Unexpected character encountered while parsing value: p. Path '', line 1, position 1."); + } + + [Test] + public void ReadAsDateTime_BadData() + { + string json = @"pie"; + + JsonTextReader reader = new JsonTextReader(new StringReader(json)); + + ExceptionAssert.Throws(() => { reader.ReadAsDateTime(); }, "Unexpected character encountered while parsing value: p. Path '', line 1, position 1."); + } + [Test] public void ReadAsDateTime_Boolean() { diff --git a/Src/Newtonsoft.Json/JsonTextReader.cs b/Src/Newtonsoft.Json/JsonTextReader.cs index 89cc68e2..693da178 100644 --- a/Src/Newtonsoft.Json/JsonTextReader.cs +++ b/Src/Newtonsoft.Json/JsonTextReader.cs @@ -449,7 +449,7 @@ namespace Newtonsoft.Json public override byte[] ReadAsBytes() { EnsureBuffer(); - bool isWrappedArray = false; + bool isWrapped = false; switch (_currentState) { @@ -477,7 +477,7 @@ namespace Newtonsoft.Json case '\'': ParseString(currentChar, ReadType.ReadAsBytes); byte[] data = (byte[])Value; - if (isWrappedArray) + if (isWrapped) { ReaderReadAndAssert(); if (TokenType != JsonToken.EndObject) @@ -491,7 +491,7 @@ namespace Newtonsoft.Json _charPos++; SetToken(JsonToken.StartObject); ReadIntoWrappedTypeObject(); - isWrappedArray = true; + isWrapped = true; break; case '[': _charPos++;