From 07a9d39f57093c886fe64b02006cae26193eb8aa Mon Sep 17 00:00:00 2001 From: Jacques Lucke Date: Tue, 9 Mar 2021 09:45:18 +0100 Subject: Fix: unconnected multi socket input crashes The crash would only happen when the output of the Join Geometry node is used. --- source/blender/modifiers/intern/MOD_nodes.cc | 4 ++++ source/blender/nodes/NOD_geometry_exec.hh | 16 ++++++++++------ 2 files changed, 14 insertions(+), 6 deletions(-) (limited to 'source/blender') diff --git a/source/blender/modifiers/intern/MOD_nodes.cc b/source/blender/modifiers/intern/MOD_nodes.cc index c0c7897413b..34730292133 100644 --- a/source/blender/modifiers/intern/MOD_nodes.cc +++ b/source/blender/modifiers/intern/MOD_nodes.cc @@ -424,6 +424,10 @@ class GeometryNodesEvaluator { if (socket_ref->bsocket()->type != SOCK_GEOMETRY) { continue; } + if (socket_ref->is_multi_input_socket()) { + /* Not needed currently. */ + continue; + } bNodeTree *btree_cow = node->btree(); bNodeTree *btree_original = (bNodeTree *)DEG_get_original_id((ID *)btree_cow); diff --git a/source/blender/nodes/NOD_geometry_exec.hh b/source/blender/nodes/NOD_geometry_exec.hh index 1772f92c4b6..5b123e68fe2 100644 --- a/source/blender/nodes/NOD_geometry_exec.hh +++ b/source/blender/nodes/NOD_geometry_exec.hh @@ -120,13 +120,17 @@ class GeoNodeExecParams { template Vector extract_multi_input(StringRef identifier) { Vector values; - values.append(input_values_.extract(identifier)); - int i = 1; - std::string sub_identifier = identifier + "[1]"; - while (input_values_.contains(sub_identifier)) { + int index = 0; + while (true) { + std::string sub_identifier = identifier; + if (index > 0) { + sub_identifier += "[" + std::to_string(index) + "]"; + } + if (!input_values_.contains(sub_identifier)) { + break; + } values.append(input_values_.extract(sub_identifier)); - i++; - sub_identifier = identifier + "[" + std::to_string(i) + "]"; + index++; } return values; } -- cgit v1.2.3