diff options
author | Campbell Barton <campbell@blender.org> | 2022-02-20 13:28:59 +0300 |
---|---|---|
committer | Campbell Barton <campbell@blender.org> | 2022-02-21 04:01:32 +0300 |
commit | 7b11c717294341f5c288e2dc8432e84bc53663ff (patch) | |
tree | 9491ea278c18761762733ffc97c82477959af771 /source/blender/makesrna | |
parent | 2554ef986a8ccd1dc245478f99524dc68f8af435 (diff) |
RNA: modify debug mode logic for setting invalid unset values
The previous behavior called RNA_enum_item_add a second time,
filled it's contents with invalid values then subtracted totitem,
this caused an unusual reallocation pattern where MEM_recallocN
would run in order to create the dummy item, then again when adding
another itme (reallocating an array of the same size).
Simply memset the array to 0xff instead.
Diffstat (limited to 'source/blender/makesrna')
-rw-r--r-- | source/blender/makesrna/intern/rna_define.c | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c index 850accd0b24..5127b418b7f 100644 --- a/source/blender/makesrna/intern/rna_define.c +++ b/source/blender/makesrna/intern/rna_define.c @@ -4391,24 +4391,21 @@ void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropert if (tot == 0) { *items = MEM_callocN(sizeof(EnumPropertyItem[8]), __func__); + /* Ensure we get crashes on missing calls to 'RNA_enum_item_end', see T74227. */ +#ifdef DEBUG + memset(*items, 0xff, sizeof(EnumPropertyItem[8])); +#endif } else if (tot >= 8 && (tot & (tot - 1)) == 0) { /* power of two > 8 */ *items = MEM_recallocN_id(*items, sizeof(EnumPropertyItem) * tot * 2, __func__); +#ifdef DEBUG + memset((*items) + tot, 0xff, sizeof(EnumPropertyItem) * tot); +#endif } (*items)[tot] = *item; *totitem = tot + 1; - - /* Ensure we get crashes on missing calls to 'RNA_enum_item_end', see T74227. */ -#ifdef DEBUG - static const EnumPropertyItem item_error = { - -1, POINTER_FROM_INT(-1), -1, POINTER_FROM_INT(-1), POINTER_FROM_INT(-1)}; - if (item != &item_error) { - RNA_enum_item_add(items, totitem, &item_error); - *totitem -= 1; - } -#endif } void RNA_enum_item_add_separator(EnumPropertyItem **items, int *totitem) |