[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36508] trunk/blender/source/blender/ editors/interface/interface_layout.c: fix [#27304] uiItemsFullEnumO: operator missing srna ''

Campbell Barton ideasman42 at gmail.com
Fri May 6 04:55:10 CEST 2011


Revision: 36508
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36508
Author:   campbellbarton
Date:     2011-05-06 02:55:09 +0000 (Fri, 06 May 2011)
Log Message:
-----------
fix [#27304] uiItemsFullEnumO: operator missing srna ''
python strings are not static so dont hold pointers to them within blenders UI.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/interface/interface_layout.c

Modified: trunk/blender/source/blender/editors/interface/interface_layout.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_layout.c	2011-05-06 01:03:36 UTC (rev 36507)
+++ trunk/blender/source/blender/editors/interface/interface_layout.c	2011-05-06 02:55:09 UTC (rev 36508)
@@ -1496,8 +1496,10 @@
 
 typedef struct MenuItemLevel {
 	int opcontext;
-	const char *opname;
-	const char *propname;
+	/* dont use pointers to the strings because python can dynamically
+	 * allocate strings and free before the menu draws, see [#27304] */
+	char opname[OP_MAX_TYPENAME];
+	char propname[MAX_IDPROP_NAME];
 	PointerRNA rnapoin;
 } MenuItemLevel;
 
@@ -1514,11 +1516,16 @@
 	wmOperatorType *ot= WM_operatortype_find(opname, 1);
 	MenuItemLevel *lvl;
 
-	if(!ot || !ot->srna) {
+	if(!ot) {
 		ui_item_disabled(layout, opname);
-		RNA_warning("uiItemMenuEnumO: %s '%s'\n", ot ? "unknown operator" : "operator missing srna", name);
+		RNA_warning("uiItemMenuEnumO: unknown operator '%s'\n", opname);
 		return;
 	}
+	if(!ot->srna) {
+		ui_item_disabled(layout, opname);
+		RNA_warning("uiItemMenuEnumO: operator missing srna '%s'\n", opname);
+		return;
+	}
 
 	if(!name)
 		name= ot->name;
@@ -1526,8 +1533,8 @@
 		icon= ICON_BLANK1;
 
 	lvl= MEM_callocN(sizeof(MenuItemLevel), "MenuItemLevel");
-	lvl->opname= opname;
-	lvl->propname= propname;
+	BLI_strncpy(lvl->opname, opname, sizeof(lvl->opname));
+	BLI_strncpy(lvl->propname, propname, sizeof(lvl->propname));
 	lvl->opcontext= layout->root->opcontext;
 
 	ui_item_menu(layout, name, icon, menu_item_enum_opname_menu, NULL, lvl);
@@ -1560,7 +1567,7 @@
 
 	lvl= MEM_callocN(sizeof(MenuItemLevel), "MenuItemLevel");
 	lvl->rnapoin= *ptr;
-	lvl->propname= propname;
+	BLI_strncpy(lvl->propname, propname, sizeof(lvl->propname));
 	lvl->opcontext= layout->root->opcontext;
 
 	ui_item_menu(layout, name, icon, menu_item_enum_rna_menu, NULL, lvl);




More information about the Bf-blender-cvs mailing list