[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58310] trunk/blender/source/blender/ makesrna/intern/makesrna.c: fix [#36155] Crash with __contains__

Campbell Barton ideasman42 at gmail.com
Tue Jul 16 07:29:19 CEST 2013


Revision: 58310
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58310
Author:   campbellbarton
Date:     2013-07-16 05:29:19 +0000 (Tue, 16 Jul 2013)
Log Message:
-----------
fix [#36155] Crash with __contains__

Modified Paths:
--------------
    trunk/blender/source/blender/makesrna/intern/makesrna.c

Modified: trunk/blender/source/blender/makesrna/intern/makesrna.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/makesrna.c	2013-07-16 05:10:58 UTC (rev 58309)
+++ trunk/blender/source/blender/makesrna/intern/makesrna.c	2013-07-16 05:29:19 UTC (rev 58310)
@@ -1256,7 +1256,7 @@
 	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 @@
 	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");




More information about the Bf-blender-cvs mailing list