From b9ac7f2c4b1f49b310ea3615ad994fcfa308d72f Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Wed, 12 Jul 2023 18:33:19 +0200 Subject: [PATCH] Harden Flowchart and Connection JSON serializers --- .../Flowchart/Serialization/ConnectionJsonConverter.cs | 3 +++ .../Flowchart/Serialization/FlowchartJsonConverter.cs | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/modules/Elsa.Workflows.Core/Activities/Flowchart/Serialization/ConnectionJsonConverter.cs b/src/modules/Elsa.Workflows.Core/Activities/Flowchart/Serialization/ConnectionJsonConverter.cs index 66f831c21..4986405bf 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/Flowchart/Serialization/ConnectionJsonConverter.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/Flowchart/Serialization/ConnectionJsonConverter.cs @@ -44,6 +44,9 @@ public class ConnectionJsonConverter : JsonConverter /// public override void Write(Utf8JsonWriter writer, Connection value, JsonSerializerOptions options) { + if (value.Source.Activity == null! || value.Target.Activity == null!) + return; + var model = new { Source = new diff --git a/src/modules/Elsa.Workflows.Core/Activities/Flowchart/Serialization/FlowchartJsonConverter.cs b/src/modules/Elsa.Workflows.Core/Activities/Flowchart/Serialization/FlowchartJsonConverter.cs index 23883865d..9f1b993b3 100644 --- a/src/modules/Elsa.Workflows.Core/Activities/Flowchart/Serialization/FlowchartJsonConverter.cs +++ b/src/modules/Elsa.Workflows.Core/Activities/Flowchart/Serialization/FlowchartJsonConverter.cs @@ -124,8 +124,12 @@ public class FlowchartJsonConverter : JsonConverter { var missingSource = notFoundConnection.Source; var missingTarget = notFoundConnection.Target; - var source = foundActivities.FirstOrDefault(x => x.Id == missingSource.Activity.Id); - var target = foundActivities.FirstOrDefault(x => x.Id == missingTarget.Activity.Id); + + // ReSharper disable ConditionalAccessQualifierIsNonNullableAccordingToAPIContract + // Activity might be null in case of JSON missing information. + var source = foundActivities.FirstOrDefault(x => x.Id == missingSource.Activity?.Id); + var target = foundActivities.FirstOrDefault(x => x.Id == missingTarget.Activity?.Id); + // ReSharper restore ConditionalAccessQualifierIsNonNullableAccordingToAPIContract if (source == null || target == null) continue;