From 6c4449eecd9a90897043b7117b7d98dc1dc86aa2 Mon Sep 17 00:00:00 2001 From: Shannon Deminick Date: Wed, 5 Aug 2020 17:06:40 +1000 Subject: [PATCH] better null checking for config validation limits (#8588) --- .../BlockEditorPropertyEditor.cs | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/Umbraco.Web/PropertyEditors/BlockEditorPropertyEditor.cs b/src/Umbraco.Web/PropertyEditors/BlockEditorPropertyEditor.cs index a9dcd6b68b..3c0858a59e 100644 --- a/src/Umbraco.Web/PropertyEditors/BlockEditorPropertyEditor.cs +++ b/src/Umbraco.Web/PropertyEditors/BlockEditorPropertyEditor.cs @@ -241,19 +241,33 @@ namespace Umbraco.Web.PropertyEditors public IEnumerable Validate(object value, string valueType, object dataTypeConfiguration) { var blockConfig = (BlockListConfiguration)dataTypeConfiguration; + if (blockConfig == null) yield break; + + var validationLimit = blockConfig.ValidationLimit; + if (validationLimit == null) yield break; + var blockEditorData = _blockEditorValues.DeserializeAndClean(value); - if ((blockEditorData == null && blockConfig?.ValidationLimit?.Min > 0) - || (blockEditorData != null && blockEditorData.Layout.Count() < blockConfig?.ValidationLimit?.Min)) + + if ((blockEditorData == null && validationLimit.Min.HasValue && validationLimit.Min > 0) + || (blockEditorData != null && validationLimit.Min.HasValue && blockEditorData.Layout.Count() < validationLimit.Min)) { yield return new ValidationResult( - _textService.Localize("validation/entriesShort", new[] { blockConfig.ValidationLimit.Min.ToString(), (blockConfig.ValidationLimit.Min - blockEditorData.Layout.Count()).ToString() }), + _textService.Localize("validation/entriesShort", new[] + { + validationLimit.Min.ToString(), + (validationLimit.Min - blockEditorData.Layout.Count()).ToString() + }), new[] { "minCount" }); } - if (blockEditorData != null && blockEditorData.Layout.Count() > blockConfig?.ValidationLimit?.Max) + if (blockEditorData != null && validationLimit.Max.HasValue && blockEditorData.Layout.Count() > validationLimit.Max) { yield return new ValidationResult( - _textService.Localize("validation/entriesExceed", new[] { blockConfig.ValidationLimit.Max.ToString(), (blockEditorData.Layout.Count() - blockConfig.ValidationLimit.Max).ToString() }), + _textService.Localize("validation/entriesExceed", new[] + { + validationLimit.Max.ToString(), + (blockEditorData.Layout.Count() - validationLimit.Max).ToString() + }), new[] { "maxCount" }); } } @@ -326,7 +340,7 @@ namespace Umbraco.Web.PropertyEditors var contentTypePropertyTypes = new Dictionary>(); // filter out any content that isn't referenced in the layout references - foreach(var block in blockEditorData.BlockValue.ContentData.Where(x => blockEditorData.References.Any(r => r.ContentUdi == x.Udi))) + foreach (var block in blockEditorData.BlockValue.ContentData.Where(x => blockEditorData.References.Any(r => r.ContentUdi == x.Udi))) { ResolveBlockItemData(block, contentTypePropertyTypes); }