[Bf-blender-cvs] [e35053d3690] master: Fix T103850: Convex hull node crash with empty geometry components

Iliya Katueshenock noreply at git.blender.org
Fri Jan 13 22:46:48 CET 2023


Commit: e35053d369067cdc2d8308c241aa599fd22d8115
Author: Iliya Katueshenock
Date:   Fri Jan 13 15:44:29 2023 -0600
Branches: master
https://developer.blender.org/rBe35053d369067cdc2d8308c241aa599fd22d8115

Fix T103850: Convex hull node crash with empty geometry components

Avoid using components that can contain null pointer.
Getting attibute should avoid trying to do it for a null mesh.
This fix bypasses working with components.

Differential Revision: https://developer.blender.org/D16997

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

M	source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc

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

diff --git a/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc b/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
index 84cc2b49141..3ede378e95a 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
@@ -143,10 +143,10 @@ static Mesh *compute_hull(const GeometrySet &geometry_set)
 
   Span<float3> positions_span;
 
-  if (const MeshComponent *component = geometry_set.get_component_for_read<MeshComponent>()) {
+  if (const Mesh *mesh = geometry_set.get_mesh_for_read()) {
     count++;
-    if (const VArray<float3> positions = component->attributes()->lookup<float3>(
-            "position", ATTR_DOMAIN_POINT)) {
+    if (const VArray<float3> positions = mesh->attributes().lookup<float3>("position",
+                                                                           ATTR_DOMAIN_POINT)) {
       if (positions.is_span()) {
         span_count++;
         positions_span = positions.get_internal_span();
@@ -155,11 +155,10 @@ static Mesh *compute_hull(const GeometrySet &geometry_set)
     }
   }
 
-  if (const PointCloudComponent *component =
-          geometry_set.get_component_for_read<PointCloudComponent>()) {
+  if (const PointCloud *points = geometry_set.get_pointcloud_for_read()) {
     count++;
-    if (const VArray<float3> positions = component->attributes()->lookup<float3>(
-            "position", ATTR_DOMAIN_POINT)) {
+    if (const VArray<float3> positions = points->attributes().lookup<float3>("position",
+                                                                             ATTR_DOMAIN_POINT)) {
       if (positions.is_span()) {
         span_count++;
         positions_span = positions.get_internal_span();
@@ -189,18 +188,17 @@ static Mesh *compute_hull(const GeometrySet &geometry_set)
   Array<float3> positions(total_num);
   int offset = 0;
 
-  if (const MeshComponent *component = geometry_set.get_component_for_read<MeshComponent>()) {
-    if (const VArray<float3> varray = component->attributes()->lookup<float3>("position",
-                                                                              ATTR_DOMAIN_POINT)) {
+  if (const Mesh *mesh = geometry_set.get_mesh_for_read()) {
+    if (const VArray<float3> varray = mesh->attributes().lookup<float3>("position",
+                                                                        ATTR_DOMAIN_POINT)) {
       varray.materialize(positions.as_mutable_span().slice(offset, varray.size()));
       offset += varray.size();
     }
   }
 
-  if (const PointCloudComponent *component =
-          geometry_set.get_component_for_read<PointCloudComponent>()) {
-    if (const VArray<float3> varray = component->attributes()->lookup<float3>("position",
-                                                                              ATTR_DOMAIN_POINT)) {
+  if (const PointCloud *points = geometry_set.get_pointcloud_for_read()) {
+    if (const VArray<float3> varray = points->attributes().lookup<float3>("position",
+                                                                          ATTR_DOMAIN_POINT)) {
       varray.materialize(positions.as_mutable_span().slice(offset, varray.size()));
       offset += varray.size();
     }



More information about the Bf-blender-cvs mailing list