quite a few python panels (10 or so) had names longer then the PanelType allowed,
authorCampbell Barton <ideasman42@gmail.com>
Tue, 22 Dec 2009 10:04:15 +0000 (10:04 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 22 Dec 2009 10:04:15 +0000 (10:04 +0000)
for panels it would fail silently but for menu's it meant further references would give errors.

increase the registered class name from 32 to 64 and raise an error if the limit reached.

source/blender/blenkernel/BKE_screen.h
source/blender/makesrna/intern/rna_ID.c
source/blender/makesrna/intern/rna_render.c
source/blender/makesrna/intern/rna_ui.c
source/blender/render/extern/include/RE_pipeline.h

index bf01ef0ec608d58e2ae1dd1aa99687dc73b7329b..c9d1caa1cfea9adb4d954b49038d9016bee49460 100644 (file)
@@ -55,7 +55,7 @@ struct uiMenuItem;
    ED_spacetypes_init() in editors/area/spacetypes.c   */
 /* an editor in Blender is a combined ScrArea + SpaceType + SpaceData */
 
    ED_spacetypes_init() in editors/area/spacetypes.c   */
 /* an editor in Blender is a combined ScrArea + SpaceType + SpaceData */
 
-#define BKE_ST_MAXNAME 32
+#define BKE_ST_MAXNAME 64
 
 typedef struct SpaceType {
        struct SpaceType *next, *prev;
 
 typedef struct SpaceType {
        struct SpaceType *next, *prev;
index 2aeb600bc423e8142d76d0334427d5669e425374..a250f0a49b493fbc5f3449aa1c4bdc08f4522540 100644 (file)
@@ -205,6 +205,15 @@ StructRNA *rna_IDPropertyGroup_register(const bContext *C, ReportList *reports,
        if(validate(&dummyptr, data, NULL) != 0)
                return NULL;
 
        if(validate(&dummyptr, data, NULL) != 0)
                return NULL;
 
+       /* note: it looks like there is no length limit on the srna id since its
+        * just a char pointer, but take care here, also be careful that python
+        * owns the string pointer which it could potentually free while blender
+        * is running. */
+       if(strlen(identifier) >= sizeof(((IDProperty *)NULL)->name)) {
+               BKE_reportf(reports, RPT_ERROR, "registering id property class: '%s' is too long, maximum length is %d.", identifier, sizeof(((IDProperty *)NULL)->name));
+               return NULL;
+       }
+
        return RNA_def_struct(&BLENDER_RNA, identifier, "IDPropertyGroup");  // XXX
 }
 
        return RNA_def_struct(&BLENDER_RNA, identifier, "IDPropertyGroup");  // XXX
 }
 
index 5a80db74c3846194e353b91ea69ab384174e8761..8212423acd5b503f13bcba97402e495782d97020 100644 (file)
@@ -125,7 +125,12 @@ static StructRNA *rna_RenderEngine_register(const bContext *C, ReportList *repor
        /* validate the python class */
        if(validate(&dummyptr, data, have_function) != 0)
                return NULL;
        /* validate the python class */
        if(validate(&dummyptr, data, have_function) != 0)
                return NULL;
-       
+
+       if(strlen(identifier) >= sizeof(dummyet.idname)) {
+               BKE_reportf(reports, RPT_ERROR, "registering render engine class: '%s' is too long, maximum length is %d.", identifier, sizeof(dummyet.idname));
+               return NULL;
+       }
+
        /* check if we have registered this engine type before, and remove it */
        for(et=R_engines.first; et; et=et->next) {
                if(strcmp(et->idname, dummyet.idname) == 0) {
        /* check if we have registered this engine type before, and remove it */
        for(et=R_engines.first; et; et=et->next) {
                if(strcmp(et->idname, dummyet.idname) == 0) {
index d33e96df2e64e37f1883349f60072e88958d6dd7..cbd524680c1fd9e162404e00b13072c9eada34bb 100644 (file)
@@ -163,6 +163,11 @@ static StructRNA *rna_Panel_register(const bContext *C, ReportList *reports, voi
        /* validate the python class */
        if(validate(&dummyptr, data, have_function) != 0)
                return NULL;
        /* validate the python class */
        if(validate(&dummyptr, data, have_function) != 0)
                return NULL;
+               
+       if(strlen(identifier) >= sizeof(dummypt.idname)) {
+               BKE_reportf(reports, RPT_ERROR, "registering panel class: '%s' is too long, maximum length is %d.", identifier, sizeof(dummypt.idname));
+               return NULL;
+       }
        
        if(!(art=region_type_find(reports, dummypt.space_type, dummypt.region_type)))
                return NULL;
        
        if(!(art=region_type_find(reports, dummypt.space_type, dummypt.region_type)))
                return NULL;
@@ -260,7 +265,12 @@ static StructRNA *rna_Header_register(const bContext *C, ReportList *reports, vo
        /* validate the python class */
        if(validate(&dummyhtr, data, have_function) != 0)
                return NULL;
        /* validate the python class */
        if(validate(&dummyhtr, data, have_function) != 0)
                return NULL;
-       
+
+       if(strlen(identifier) >= sizeof(dummyht.idname)) {
+               BKE_reportf(reports, RPT_ERROR, "registering header class: '%s' is too long, maximum length is %d.", identifier, sizeof(dummyht.idname));
+               return NULL;
+       }
+
        if(!(art=region_type_find(reports, dummyht.space_type, RGN_TYPE_HEADER)))
                return NULL;
 
        if(!(art=region_type_find(reports, dummyht.space_type, RGN_TYPE_HEADER)))
                return NULL;
 
@@ -373,6 +383,11 @@ static StructRNA *rna_Menu_register(const bContext *C, ReportList *reports, void
        /* validate the python class */
        if(validate(&dummymtr, data, have_function) != 0)
                return NULL;
        /* validate the python class */
        if(validate(&dummymtr, data, have_function) != 0)
                return NULL;
+       
+       if(strlen(identifier) >= sizeof(dummymt.idname)) {
+               BKE_reportf(reports, RPT_ERROR, "registering menu class: '%s' is too long, maximum length is %d.", identifier, sizeof(dummymt.idname));
+               return NULL;
+       }
 
        /* check if we have registered this menu type before, and remove it */
        mt= WM_menutype_find(dummymt.idname, TRUE);
 
        /* check if we have registered this menu type before, and remove it */
        mt= WM_menutype_find(dummymt.idname, TRUE);
index 56a81ac6b438697c8e67b9726138a12ded3e59e1..477a4baead92d094f09772694bd36d1c6a67cd28 100644 (file)
@@ -253,8 +253,8 @@ typedef struct RenderEngineType {
        struct RenderEngineType *next, *prev;
 
        /* type info */
        struct RenderEngineType *next, *prev;
 
        /* type info */
-       char idname[32];
-       char name[32];
+       char idname[64]; // best keep the same size as BKE_ST_MAXNAME
+       char name[64];
        int flag;
 
        void (*render)(struct RenderEngine *engine, struct Scene *scene);
        int flag;
 
        void (*render)(struct RenderEngine *engine, struct Scene *scene);