From 1b9a492a742990c1c3b6d5b9a7a70cedd1c325be Mon Sep 17 00:00:00 2001 From: James Lindsay <78500760+0HyperCube@users.noreply.github.com> Date: Thu, 30 Oct 2025 12:01:45 +0000 Subject: [PATCH] Fix crash when creating cyclic nodes (#3313) * Fix crash when creating cyclic nodes * Re-add the recursive set_input call --- .../document/utility_types/network_interface.rs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/editor/src/messages/portfolio/document/utility_types/network_interface.rs b/editor/src/messages/portfolio/document/utility_types/network_interface.rs index b1aa205e..b3ae9797 100644 --- a/editor/src/messages/portfolio/document/utility_types/network_interface.rs +++ b/editor/src/messages/portfolio/document/utility_types/network_interface.rs @@ -4262,11 +4262,6 @@ impl NodeNetworkInterface { } } - let previous_metadata = match &previous_input { - NodeInput::Node { node_id, .. } => self.position(node_id, network_path).map(|position| (*node_id, position)), - _ => None, - }; - let Some(network) = self.network_mut(network_path) else { log::error!("Could not get nested network in set_input"); return; @@ -4303,6 +4298,12 @@ impl NodeNetworkInterface { return; } + // It is necessary to ensure the grpah is acyclic before calling `self.position` as it sometimes crashes with cyclic graphs #3227 + let previous_metadata = match &previous_input { + NodeInput::Node { node_id, .. } => self.position(node_id, network_path).map(|position| (*node_id, position)), + _ => None, + }; + self.transaction_modified(); // Ensure layer is toggled to non layer if it is no longer eligible to be a layer