From 0721bd4decd1d48f22e12c2cb881b0af91b05ca1 Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Mon, 24 Oct 2016 14:20:59 +1300 Subject: [PATCH] -Fixed not erroring when deserializing incomplete JSON with a parameterized constructor --- .../Serialization/JsonSerializerTest.cs | 24 +++++++++++++++++++ .../JsonSerializerInternalReader.cs | 5 ++++ 2 files changed, 29 insertions(+) diff --git a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs index ee3302b0..d746cf13 100644 --- a/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs +++ b/Src/Newtonsoft.Json.Tests/Serialization/JsonSerializerTest.cs @@ -9753,6 +9753,14 @@ Path '', line 1, position 1."); } } #endif + + [Test] + public void ParametrizedConstructor_IncompleteJson() + { + string s = @"{""text"":""s"",""cursorPosition"":189,""dataSource"":""json_northwind"","; + + ExceptionAssert.Throws(() => JsonConvert.DeserializeObject(s), "Unexpected end when deserializing object. Path 'dataSource', line 1, position 63."); + } } public class DerivedWithPrivate : BaseWithPrivate @@ -9912,4 +9920,20 @@ Path '', line 1, position 1."); z = 3; } } + + public class CompletionDataRequest + { + public CompletionDataRequest(string text, int cursorPosition, string dataSource, string project) + { + Text = text; + CursorPosition = cursorPosition; + DataSource = dataSource; + Project = project; + } + + public string Text { get; } + public int CursorPosition { get; } + public string DataSource { get; } + public string Project { get; } + } } \ No newline at end of file diff --git a/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalReader.cs b/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalReader.cs index 36f0e9fa..0cd31eb1 100644 --- a/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalReader.cs +++ b/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalReader.cs @@ -2194,6 +2194,11 @@ namespace Newtonsoft.Json.Serialization } } while (!exit && reader.Read()); + if (!exit) + { + ThrowUnexpectedEndException(reader, contract, null, "Unexpected end when deserializing object."); + } + return propertyValues; }