[Bf-blender-cvs] [07a9d39f570] master: Fix: unconnected multi socket input crashes

Jacques Lucke noreply at git.blender.org
Tue Mar 9 09:45:29 CET 2021


Commit: 07a9d39f57093c886fe64b02006cae26193eb8aa
Author: Jacques Lucke
Date:   Tue Mar 9 09:45:18 2021 +0100
Branches: master
https://developer.blender.org/rB07a9d39f57093c886fe64b02006cae26193eb8aa

Fix: unconnected multi socket input crashes

The crash would only happen when the output of the Join Geometry node is used.

===================================================================

M	source/blender/modifiers/intern/MOD_nodes.cc
M	source/blender/nodes/NOD_geometry_exec.hh

===================================================================

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<typename T> Vector<T> extract_multi_input(StringRef identifier)
   {
     Vector<T> values;
-    values.append(input_values_.extract<T>(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<T>(sub_identifier));
-      i++;
-      sub_identifier = identifier + "[" + std::to_string(i) + "]";
+      index++;
     }
     return values;
   }



More information about the Bf-blender-cvs mailing list