From b6794ab1b781c9e37aff03fc4fea7ffe8da453ad Mon Sep 17 00:00:00 2001 From: Michiel Post Date: Wed, 18 May 2016 16:59:49 +0200 Subject: [PATCH] Fixed null reference on ModelStateDictionary.ChildNodes when calling Clear --- .../ModelBinding/ModelStateDictionary.cs | 2 +- .../ModelBinding/ModelStateDictionaryTest.cs | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ModelStateDictionary.cs b/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ModelStateDictionary.cs index 0f7ceec371..911a643d03 100644 --- a/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ModelStateDictionary.cs +++ b/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ModelStateDictionary.cs @@ -633,7 +633,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding HasRecordedMaxModelError = false; ErrorCount = 0; _root.Reset(); - _root.ChildNodes.Clear(); + _root.ChildNodes?.Clear(); } /// diff --git a/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ModelStateDictionaryTest.cs b/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ModelStateDictionaryTest.cs index 26256a07ae..231f444240 100644 --- a/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ModelStateDictionaryTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ModelStateDictionaryTest.cs @@ -125,6 +125,22 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding Assert.Equal(ModelValidationState.Valid, dictionary.ValidationState); } + [Fact] + public void Clear_RemovesAllEntries_IfDictionaryIsEmpty() + { + // Arrange + var dictionary = new ModelStateDictionary(); + + // Act + dictionary.Clear(); + + // Assert + Assert.Equal(0, dictionary.Count); + Assert.Equal(0, dictionary.ErrorCount); + Assert.Empty(dictionary); + Assert.Equal(ModelValidationState.Valid, dictionary.ValidationState); + } + [Fact] public void MarkFieldSkipped_MarksFieldAsSkipped_IfStateIsUnvalidated() {