From 8d56a031ef4722212b7a3c4a46faabae7eaa1ef6 Mon Sep 17 00:00:00 2001 From: lsemp3d <58790905+lsemp3d@users.noreply.github.com> Date: Tue, 20 Jul 2021 10:54:59 -0700 Subject: [PATCH 1/2] crash guard when the data has a list with an empty contract Signed-off-by: lsemp3d <58790905+lsemp3d@users.noreply.github.com> --- .../Code/Include/ScriptCanvas/Core/Connection.cpp | 4 ++++ .../ScriptCanvas/Code/Include/ScriptCanvas/Core/Slot.cpp | 9 ++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Connection.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Connection.cpp index d97a208064..ce5d112a7b 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Connection.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Connection.cpp @@ -22,6 +22,10 @@ namespace ScriptCanvas AZStd::string failedContract; AZStd::all_of(firstSlot.GetContracts().begin(), firstSlot.GetContracts().end(), [&firstSlot, &secondSlot, &outcome](const AZStd::unique_ptr& contract) { + if (!contract) + { + return false; + } outcome = contract->Evaluate(firstSlot, secondSlot); if (outcome.IsSuccess()) { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Slot.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Slot.cpp index 204a087ab3..ffb3a0a9c4 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Slot.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Slot.cpp @@ -827,10 +827,13 @@ namespace ScriptCanvas for (const auto& contract : m_contracts) { - failureReason = contract->EvaluateForType(dataType); - if (!failureReason) + if (contract) { - return failureReason; + failureReason = contract->EvaluateForType(dataType); + if (!failureReason) + { + return failureReason; + } } } From 6c4fdd3af524d90ecdace0f6ed0cf261300da4e2 Mon Sep 17 00:00:00 2001 From: lsemp3d <58790905+lsemp3d@users.noreply.github.com> Date: Tue, 20 Jul 2021 12:59:08 -0700 Subject: [PATCH 2/2] Missing early out if no contract exists Signed-off-by: lsemp3d <58790905+lsemp3d@users.noreply.github.com> --- .../Code/Include/ScriptCanvas/Core/Connection.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Connection.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Connection.cpp index ce5d112a7b..41cdd1a56a 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Connection.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Connection.cpp @@ -22,10 +22,11 @@ namespace ScriptCanvas AZStd::string failedContract; AZStd::all_of(firstSlot.GetContracts().begin(), firstSlot.GetContracts().end(), [&firstSlot, &secondSlot, &outcome](const AZStd::unique_ptr& contract) { - if (!contract) - { - return false; - } + if (!contract) + { + return false; + } + outcome = contract->Evaluate(firstSlot, secondSlot); if (outcome.IsSuccess()) {