diff --git a/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs b/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs index 2582f43a..2611929a 100644 --- a/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs +++ b/Src/Newtonsoft.Json.Tests/JsonConvertTest.cs @@ -118,6 +118,17 @@ namespace Newtonsoft.Json.Tests }, "No JSON content found. Path '', line 0, position 0."); } + [Test] + public void NoConstructorName() { + ExceptionAssert.Throws( + () => JsonConvert.DeserializeObject("[new \0("), + "Empty constructor name. Path '', line 1, position 6."); + + ExceptionAssert.Throws( + () => JsonConvert.DeserializeObject("{'x':new \0("), + "Empty constructor name. Path 'x', line 1, position 10."); + } + [Test] public void PopulateObjectWithOnlyComment() { @@ -1830,4 +1841,4 @@ namespace Newtonsoft.Json.Tests public DateTime Expiration { get; set; } } } -} \ No newline at end of file +} diff --git a/Src/Newtonsoft.Json/JsonTextReader.cs b/Src/Newtonsoft.Json/JsonTextReader.cs index 925f4b6b..dd8094f9 100644 --- a/Src/Newtonsoft.Json/JsonTextReader.cs +++ b/Src/Newtonsoft.Json/JsonTextReader.cs @@ -1937,6 +1937,11 @@ namespace Newtonsoft.Json throw JsonReaderException.Create(this, "Unexpected character while parsing constructor: {0}.".FormatWith(CultureInfo.InvariantCulture, currentChar)); } } + + if (initialPosition == endPosition) + { + throw JsonReaderException.Create(this, "Empty constructor name."); + } _stringReference = new StringReference(_chars, initialPosition, endPosition - initialPosition); string constructorName = _stringReference.ToString();