diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-07-16 09:29:19 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-07-16 09:29:19 +0400 |
commit | 2a417a597d524f24570d0b210edfe3925e81bf8a (patch) | |
tree | 24204ad7b822783a1aa98126c4826a263b044906 /source/blender/makesrna/intern/makesrna.c | |
parent | b1403415aed7787a03373f48b2d57dc2e9b6e316 (diff) |
fix [#36155] Crash with __contains__
Diffstat (limited to 'source/blender/makesrna/intern/makesrna.c')
-rw-r--r-- | source/blender/makesrna/intern/makesrna.c | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/source/blender/makesrna/intern/makesrna.c b/source/blender/makesrna/intern/makesrna.c index 9686d7fab51..faf348302e4 100644 --- a/source/blender/makesrna/intern/makesrna.c +++ b/source/blender/makesrna/intern/makesrna.c @@ -1256,7 +1256,7 @@ static char *rna_def_property_lookup_string_func(FILE *f, StructRNA *srna, Prope fprintf(f, " extern int %s_%s_length(PointerRNA *);\n", item_name_base->identifier, rna_safe_id(item_name_prop->identifier)); fprintf(f, " extern void %s_%s_get(PointerRNA *, char *);\n\n", item_name_base->identifier, rna_safe_id(item_name_prop->identifier)); - fprintf(f, " int found= 0;\n"); + fprintf(f, " bool found = false;\n"); fprintf(f, " CollectionPropertyIterator iter;\n"); fprintf(f, " char namebuf[%d];\n", namebuflen); fprintf(f, " char *name;\n\n"); @@ -1264,26 +1264,29 @@ static char *rna_def_property_lookup_string_func(FILE *f, StructRNA *srna, Prope fprintf(f, " %s_%s_begin(&iter, ptr);\n\n", srna->identifier, rna_safe_id(prop->identifier)); fprintf(f, " while (iter.valid) {\n"); - fprintf(f, " int namelen = %s_%s_length(&iter.ptr);\n", item_name_base->identifier, rna_safe_id(item_name_prop->identifier)); - fprintf(f, " if (namelen < %d) {\n", namebuflen); - fprintf(f, " %s_%s_get(&iter.ptr, namebuf);\n", item_name_base->identifier, rna_safe_id(item_name_prop->identifier)); - fprintf(f, " if (strcmp(namebuf, key) == 0) {\n"); - fprintf(f, " found = 1;\n"); - fprintf(f, " *r_ptr = iter.ptr;\n"); - fprintf(f, " break;\n"); + fprintf(f, " if (iter.ptr.data) {\n"); + fprintf(f, " int namelen = %s_%s_length(&iter.ptr);\n", item_name_base->identifier, rna_safe_id(item_name_prop->identifier)); + fprintf(f, " if (namelen < %d) {\n", namebuflen); + fprintf(f, " %s_%s_get(&iter.ptr, namebuf);\n", item_name_base->identifier, rna_safe_id(item_name_prop->identifier)); + fprintf(f, " if (strcmp(namebuf, key) == 0) {\n"); + fprintf(f, " found = true;\n"); + fprintf(f, " *r_ptr = iter.ptr;\n"); + fprintf(f, " break;\n"); + fprintf(f, " }\n"); fprintf(f, " }\n"); - fprintf(f, " }\n"); - fprintf(f, " else {\n"); - fprintf(f, " name = MEM_mallocN(namelen+1, \"name string\");\n"); - fprintf(f, " %s_%s_get(&iter.ptr, name);\n", item_name_base->identifier, rna_safe_id(item_name_prop->identifier)); - fprintf(f, " if (strcmp(name, key) == 0) {\n"); - fprintf(f, " MEM_freeN(name);\n\n"); - fprintf(f, " found = 1;\n"); - fprintf(f, " *r_ptr = iter.ptr;\n"); - fprintf(f, " break;\n"); + fprintf(f, " else {\n"); + fprintf(f, " name = MEM_mallocN(namelen+1, \"name string\");\n"); + fprintf(f, " %s_%s_get(&iter.ptr, name);\n", item_name_base->identifier, rna_safe_id(item_name_prop->identifier)); + fprintf(f, " if (strcmp(name, key) == 0) {\n"); + fprintf(f, " MEM_freeN(name);\n\n"); + fprintf(f, " found = true;\n"); + fprintf(f, " *r_ptr = iter.ptr;\n"); + fprintf(f, " break;\n"); + fprintf(f, " }\n"); + fprintf(f, " else {\n"); + fprintf(f, " MEM_freeN(name);\n"); + fprintf(f, " }\n"); fprintf(f, " }\n"); - fprintf(f, " else\n"); - fprintf(f, " MEM_freeN(name);\n"); fprintf(f, " }\n"); fprintf(f, " %s_%s_next(&iter);\n", srna->identifier, rna_safe_id(prop->identifier)); fprintf(f, " }\n"); |