Commit: 3c1fb9aea1c843f9a60e538505eadfce95fdf728
Author: Campbell Barton
Date:   Tue Nov 8 16:43:16 2022 +1100
Branches: blender-v3.4-release
https://developer.blender.org/rB3c1fb9aea1c843f9a60e538505eadfce95fdf728

Workaround crash generating Python API documentation

Avoid accessing freed memory from dynamically allocated EnumPropertyItem
arrays. Rely on the memory being held by the iterator which isn't the
case when it was converted to a tuple.

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

M       release/scripts/modules/rna_info.py

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

diff --git a/release/scripts/modules/rna_info.py 
b/release/scripts/modules/rna_info.py
index e2bbc4077a1..07daf7c55eb 100644
--- a/release/scripts/modules/rna_info.py
+++ b/release/scripts/modules/rna_info.py
@@ -286,7 +286,10 @@ class InfoPropertyRNA:
 
         self.enum_pointer = 0
         if self.type == "enum":
-            items = tuple(rna_prop.enum_items)
+            # WARNING: don't convert to a tuple as this causes dynamically 
allocated enums to access freed memory
+            # since freeing the iterator may free the memory used to store the 
internal `EnumPropertyItem` array.
+            # To support this properly RNA would have to support owning the 
dynamically allocated memory.
+            items = rna_prop.enum_items
             items_static = tuple(rna_prop.enum_items_static)
             self.enum_items[:] = [(item.identifier, item.name, 
item.description) for item in items]
             self.is_enum_flag = rna_prop.is_enum_flag
@@ -295,6 +298,7 @@ class InfoPropertyRNA:
             item = (items_static or items)
             if item:
                 self.enum_pointer = item[0].as_pointer()
+            del items, items_static, item
         else:
             self.is_enum_flag = False

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to