diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-07-27 18:17:20 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-07-27 18:17:20 +0400 |
commit | d7ff7ad3e9da1a7fd322e37382d4c28f7b84b036 (patch) | |
tree | 4aabdefc7f0a17e40f17210f4bf4c11c4ff179e3 /source/blender | |
parent | 6aa001f48dc9358a2183b62e03a95b19af2cdca7 (diff) |
correct sloppy NULL checks, in interface code:
- uiPupMenuBegin was checking for NULL title but would still crash if it were NULL.
- now tag the function as 'nonnull' and remove NULL checks. make sure NULL isnt passed to it.
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/include/UI_interface.h | 6 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_handlers.c | 6 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_regions.c | 4 |
3 files changed, 9 insertions, 7 deletions
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index e5cc0dd8ea7..2daab072435 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -327,7 +327,11 @@ typedef void (*uiMenuHandleFunc)(struct bContext *C, void *arg, int event); typedef struct uiPopupMenu uiPopupMenu; -struct uiPopupMenu *uiPupMenuBegin(struct bContext *C, const char *title, int icon); +struct uiPopupMenu *uiPupMenuBegin(struct bContext *C, const char *title, int icon) +#ifdef __GNUC__ +__attribute__((nonnull)) +#endif +; void uiPupMenuEnd(struct bContext *C, struct uiPopupMenu *head); struct uiLayout *uiPupMenuLayout(uiPopupMenu *head); diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index c60e533551b..8efad17133f 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -4944,7 +4944,6 @@ static bool ui_but_menu(bContext *C, uiBut *but) uiPopupMenu *pup; uiLayout *layout; bool is_array, is_array_component; - const char *name; uiStringInfo label = {BUT_GET_LABEL, NULL}; /* if ((but->rnapoin.data && but->rnaprop) == 0 && but->optype == NULL)*/ @@ -4957,12 +4956,11 @@ static bool ui_but_menu(bContext *C, uiBut *but) button_timers_tooltip_remove(C, but); + /* highly unlikely getting the label ever fails */ uiButGetStrInfo(C, but, &label, NULL); - name = label.strinfo; - pup = uiPupMenuBegin(C, name, ICON_NONE); + pup = uiPupMenuBegin(C, label.strinfo ? label.strinfo : "", ICON_NONE); layout = uiPupMenuLayout(pup); - if (label.strinfo) MEM_freeN(label.strinfo); diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 9c6a606333d..3405d81e04a 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -2528,7 +2528,7 @@ uiPopupMenu *uiPupMenuBegin(bContext *C, const char *title, int icon) uiStyle *style = UI_GetStyleDraw(); uiPopupMenu *pup = MEM_callocN(sizeof(uiPopupMenu), "popup menu"); uiBut *but; - + pup->block = uiBeginBlock(C, NULL, __func__, UI_EMBOSSP); pup->block->flag |= UI_BLOCK_POPUP_MEMORY; pup->block->puphash = ui_popup_menu_hash(title); @@ -2542,7 +2542,7 @@ uiPopupMenu *uiPupMenuBegin(bContext *C, const char *title, int icon) pup->block->handle = MEM_callocN(sizeof(uiPopupBlockHandle), "uiPopupBlockHandle"); /* create title button */ - if (title && title[0]) { + if (title[0]) { char titlestr[256]; if (icon) { |