diff options
author | Hans Goudey <h.goudey@me.com> | 2022-04-14 21:04:16 +0300 |
---|---|---|
committer | Hans Goudey <h.goudey@me.com> | 2022-04-14 21:04:23 +0300 |
commit | 05715eaea144b3812c2a788e5ef413a5aa601a06 (patch) | |
tree | d018a4648875b6c8fc5501e41c03e132fa6f6afc | |
parent | 80859a6cb2726a39fb22cb49f06e0355dc9390a7 (diff) |
Fix: Use after free when removing attribute on instances
Assume that only one layer matches the id and return instead
of continuing to iterate over attributes after the layers have
been potentially reallocated.
-rw-r--r-- | source/blender/blenkernel/intern/attribute_access.cc | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/attribute_access.cc b/source/blender/blenkernel/intern/attribute_access.cc index d0420b4170a..0ae9fa4356b 100644 --- a/source/blender/blenkernel/intern/attribute_access.cc +++ b/source/blender/blenkernel/intern/attribute_access.cc @@ -746,15 +746,14 @@ bool CustomDataAttributes::create_by_move(const AttributeIDRef &attribute_id, bool CustomDataAttributes::remove(const AttributeIDRef &attribute_id) { - bool result = false; for (const int i : IndexRange(data.totlayer)) { const CustomDataLayer &layer = data.layers[i]; if (custom_data_layer_matches_attribute_id(layer, attribute_id)) { CustomData_free_layer(&data, layer.type, size_, i); - result = true; + return true; } } - return result; + return false; } void CustomDataAttributes::reallocate(const int size) |