From f57395c3b6ce3d397e47864ce09f43d5312e6210 Mon Sep 17 00:00:00 2001 From: Rob Swindell <rob@synchro.net> Date: Tue, 24 Jan 2023 17:27:52 -0800 Subject: [PATCH] Don't conditionally allocate scfg_t dynamic arrays malloc(0) returns a usable/freeable pointer on all supported platforms. This change insures that the scfg_t dynamically allocated arrays are all valid non-NULL pointers, even if/when the array length is 0. This should resolve a lot of new(ish) CIDs. Or not. We'll see. :-/ --- src/sbbs3/scfglib1.c | 35 ++++------- src/sbbs3/scfglib2.c | 135 ++++++++++++------------------------------- 2 files changed, 48 insertions(+), 122 deletions(-) diff --git a/src/sbbs3/scfglib1.c b/src/sbbs3/scfglib1.c index 43e70eaf70..679e0cf8fe 100644 --- a/src/sbbs3/scfglib1.c +++ b/src/sbbs3/scfglib1.c @@ -290,11 +290,8 @@ BOOL read_main_cfg(scfg_t* cfg, char* error, size_t maxerrlen) str_list_t shell_list = iniGetParsedSectionList(sections, "shell:"); cfg->total_shells = (uint16_t)strListCount(shell_list); - if(cfg->total_shells) { - if((cfg->shell=(shell_t **)malloc(sizeof(shell_t *)*cfg->total_shells))==NULL) - return allocerr(error, maxerrlen, fname, "shells", sizeof(shell_t *)*cfg->total_shells); - } else - cfg->shell=NULL; + if((cfg->shell=(shell_t **)malloc(sizeof(shell_t *)*cfg->total_shells))==NULL) + return allocerr(error, maxerrlen, fname, "shells", sizeof(shell_t *)*cfg->total_shells); cfg->new_shell = 0; for(uint i=0; i<cfg->total_shells; i++) { @@ -369,11 +366,8 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error, size_t maxerrlen) str_list_t grp_list = iniGetParsedSectionList(sections, "grp:"); cfg->total_grps = (uint16_t)strListCount(grp_list); - if(cfg->total_grps) { - if((cfg->grp=(grp_t **)malloc(sizeof(grp_t *)*cfg->total_grps))==NULL) - return allocerr(error, maxerrlen, fname, "groups", sizeof(grp_t *)*cfg->total_grps); - } else - cfg->grp=NULL; + if((cfg->grp=(grp_t **)malloc(sizeof(grp_t *)*cfg->total_grps))==NULL) + return allocerr(error, maxerrlen, fname, "groups", sizeof(grp_t *)*cfg->total_grps); for(uint i=0; i<cfg->total_grps; i++) { @@ -398,11 +392,8 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error, size_t maxerrlen) str_list_t sub_list = iniGetParsedSectionList(sections, "sub:"); cfg->total_subs = (uint16_t)strListCount(sub_list); - if(cfg->total_subs) { - if((cfg->sub=(sub_t **)malloc(sizeof(sub_t *)*cfg->total_subs))==NULL) - return allocerr(error, maxerrlen, fname, "subs", sizeof(sub_t *)*cfg->total_subs); - } else - cfg->sub=NULL; + if((cfg->sub=(sub_t **)malloc(sizeof(sub_t *)*cfg->total_subs))==NULL) + return allocerr(error, maxerrlen, fname, "subs", sizeof(sub_t *)*cfg->total_subs); cfg->total_subs = 0; for(uint i=0; sub_list[i] != NULL; i++) { @@ -483,11 +474,8 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error, size_t maxerrlen) str_list_t faddr_list = iniGetStringList(section, NULL, "addr_list", ",", ""); cfg->total_faddrs = (uint16_t)strListCount(faddr_list); - if(cfg->total_faddrs) { - if((cfg->faddr=(faddr_t *)malloc(sizeof(faddr_t)*cfg->total_faddrs))==NULL) - return allocerr(error, maxerrlen, fname, "fido_addrs", sizeof(faddr_t)*cfg->total_faddrs); - } else - cfg->faddr=NULL; + if((cfg->faddr=(faddr_t *)malloc(sizeof(faddr_t)*cfg->total_faddrs))==NULL) + return allocerr(error, maxerrlen, fname, "fido_addrs", sizeof(faddr_t)*cfg->total_faddrs); for(uint i=0;i<cfg->total_faddrs;i++) cfg->faddr[i] = smb_atofaddr(NULL, faddr_list[i]); @@ -511,11 +499,8 @@ BOOL read_msgs_cfg(scfg_t* cfg, char* error, size_t maxerrlen) str_list_t qhub_list = iniGetParsedSectionList(sections, "qhub:"); cfg->total_qhubs = (uint16_t)strListCount(qhub_list); - if(cfg->total_qhubs) { - if((cfg->qhub=(qhub_t **)malloc(sizeof(qhub_t *)*cfg->total_qhubs))==NULL) - return allocerr(error, maxerrlen, fname, "qhubs", sizeof(qhub_t*)*cfg->total_qhubs); - } else - cfg->qhub=NULL; + if((cfg->qhub=(qhub_t **)malloc(sizeof(qhub_t *)*cfg->total_qhubs))==NULL) + return allocerr(error, maxerrlen, fname, "qhubs", sizeof(qhub_t*)*cfg->total_qhubs); cfg->total_qhubs = 0; for(uint i=0; qhub_list[i] != NULL; i++) { diff --git a/src/sbbs3/scfglib2.c b/src/sbbs3/scfglib2.c index 8e6fe9e488..7e621eb6a7 100644 --- a/src/sbbs3/scfglib2.c +++ b/src/sbbs3/scfglib2.c @@ -81,11 +81,8 @@ BOOL read_file_cfg(scfg_t* cfg, char* error, size_t maxerrlen) str_list_t fextr_list = iniGetParsedSectionList(sections, "extractor:"); cfg->total_fextrs = (uint16_t)strListCount(fextr_list); - if(cfg->total_fextrs) { - if((cfg->fextr=(fextr_t **)malloc(sizeof(fextr_t *)*cfg->total_fextrs))==NULL) - return allocerr(error, maxerrlen, fname, "fextrs", sizeof(fextr_t*)*cfg->total_fextrs); - } else - cfg->fextr=NULL; + if((cfg->fextr=(fextr_t **)malloc(sizeof(fextr_t *)*cfg->total_fextrs))==NULL) + return allocerr(error, maxerrlen, fname, "fextrs", sizeof(fextr_t*)*cfg->total_fextrs); for(uint i=0; i<cfg->total_fextrs; i++) { if((cfg->fextr[i]=(fextr_t *)malloc(sizeof(fextr_t)))==NULL) @@ -106,11 +103,8 @@ BOOL read_file_cfg(scfg_t* cfg, char* error, size_t maxerrlen) str_list_t fcomp_list = iniGetParsedSectionList(sections, "compressor:"); cfg->total_fcomps = (uint16_t)strListCount(fcomp_list); - if(cfg->total_fcomps) { - if((cfg->fcomp=(fcomp_t **)malloc(sizeof(fcomp_t *)*cfg->total_fcomps))==NULL) - return allocerr(error, maxerrlen, fname, "fcomps", sizeof(fcomp_t*)*cfg->total_fcomps); - } else - cfg->fcomp=NULL; + if((cfg->fcomp=(fcomp_t **)malloc(sizeof(fcomp_t *)*cfg->total_fcomps))==NULL) + return allocerr(error, maxerrlen, fname, "fcomps", sizeof(fcomp_t*)*cfg->total_fcomps); for(uint i=0; i<cfg->total_fcomps; i++) { if((cfg->fcomp[i]=(fcomp_t *)malloc(sizeof(fcomp_t)))==NULL) @@ -131,11 +125,8 @@ BOOL read_file_cfg(scfg_t* cfg, char* error, size_t maxerrlen) str_list_t fview_list = iniGetParsedSectionList(sections, "viewer:"); cfg->total_fviews = (uint16_t)strListCount(fview_list); - if(cfg->total_fviews) { - if((cfg->fview=(fview_t **)malloc(sizeof(fview_t *)*cfg->total_fviews))==NULL) - return allocerr(error, maxerrlen, fname, "fviews", sizeof(fview_t*)*cfg->total_fviews); - } else - cfg->fview=NULL; + if((cfg->fview=(fview_t **)malloc(sizeof(fview_t *)*cfg->total_fviews))==NULL) + return allocerr(error, maxerrlen, fname, "fviews", sizeof(fview_t*)*cfg->total_fviews); for(uint i=0; i<cfg->total_fviews; i++) { if((cfg->fview[i]=(fview_t *)malloc(sizeof(fview_t)))==NULL) @@ -156,11 +147,8 @@ BOOL read_file_cfg(scfg_t* cfg, char* error, size_t maxerrlen) str_list_t ftest_list = iniGetParsedSectionList(sections, "tester:"); cfg->total_ftests = (uint16_t)strListCount(ftest_list); - if(cfg->total_ftests) { - if((cfg->ftest=(ftest_t **)malloc(sizeof(ftest_t *)*cfg->total_ftests))==NULL) - return allocerr(error, maxerrlen, fname, "ftests", sizeof(ftest_t*)*cfg->total_ftests); - } else - cfg->ftest=NULL; + if((cfg->ftest=(ftest_t **)malloc(sizeof(ftest_t *)*cfg->total_ftests))==NULL) + return allocerr(error, maxerrlen, fname, "ftests", sizeof(ftest_t*)*cfg->total_ftests); for(uint i=0; i<cfg->total_ftests; i++) { if((cfg->ftest[i]=(ftest_t *)malloc(sizeof(ftest_t)))==NULL) @@ -182,12 +170,8 @@ BOOL read_file_cfg(scfg_t* cfg, char* error, size_t maxerrlen) str_list_t dlevent_list = iniGetParsedSectionList(sections, "dlevent:"); cfg->total_dlevents = (uint16_t)strListCount(dlevent_list); - if(cfg->total_dlevents) { - if((cfg->dlevent=(dlevent_t **)malloc(sizeof(dlevent_t *)*cfg->total_dlevents)) - ==NULL) - return allocerr(error, maxerrlen, fname, "dlevents", sizeof(dlevent_t*)*cfg->total_dlevents); - } else - cfg->dlevent=NULL; + if((cfg->dlevent=(dlevent_t **)malloc(sizeof(dlevent_t *)*cfg->total_dlevents))==NULL) + return allocerr(error, maxerrlen, fname, "dlevents", sizeof(dlevent_t*)*cfg->total_dlevents); for(uint i=0; i<cfg->total_dlevents; i++) { if((cfg->dlevent[i]=(dlevent_t *)malloc(sizeof(dlevent_t)))==NULL) @@ -209,11 +193,8 @@ BOOL read_file_cfg(scfg_t* cfg, char* error, size_t maxerrlen) str_list_t prot_list = iniGetParsedSectionList(sections, "protocol:"); cfg->total_prots = (uint16_t)strListCount(prot_list); - if(cfg->total_prots) { - if((cfg->prot=(prot_t **)malloc(sizeof(prot_t *)*cfg->total_prots))==NULL) - return allocerr(error, maxerrlen, fname, "prots", sizeof(prot_t*)*cfg->total_prots); - } else - cfg->prot=NULL; + if((cfg->prot=(prot_t **)malloc(sizeof(prot_t *)*cfg->total_prots))==NULL) + return allocerr(error, maxerrlen, fname, "prots", sizeof(prot_t*)*cfg->total_prots); for(uint i=0;i<cfg->total_prots;i++) { if((cfg->prot[i]=(prot_t *)malloc(sizeof(prot_t)))==NULL) @@ -240,11 +221,8 @@ BOOL read_file_cfg(scfg_t* cfg, char* error, size_t maxerrlen) str_list_t lib_list = iniGetParsedSectionList(sections, "lib:"); cfg->total_libs = (uint16_t)strListCount(lib_list); - if(cfg->total_libs) { - if((cfg->lib=(lib_t **)malloc(sizeof(lib_t *)*cfg->total_libs))==NULL) - return allocerr(error, maxerrlen, fname, "libs", sizeof(lib_t *)*cfg->total_libs); - } else - cfg->lib=NULL; + if((cfg->lib=(lib_t **)malloc(sizeof(lib_t *)*cfg->total_libs))==NULL) + return allocerr(error, maxerrlen, fname, "libs", sizeof(lib_t *)*cfg->total_libs); for(uint i=0; i<cfg->total_libs; i++) { char* name = lib_list[i]; @@ -291,11 +269,8 @@ BOOL read_file_cfg(scfg_t* cfg, char* error, size_t maxerrlen) str_list_t dir_list = iniGetParsedSectionList(sections, "dir:"); cfg->total_dirs = (uint16_t)strListCount(dir_list); - if(cfg->total_dirs) { - if((cfg->dir=(dir_t **)malloc(sizeof(dir_t *)*(cfg->total_dirs+1)))==NULL) - return allocerr(error, maxerrlen, fname, "dirs", sizeof(dir_t *)*(cfg->total_dirs+1)); - } else - cfg->dir=NULL; + if((cfg->dir=(dir_t **)malloc(sizeof(dir_t *)*(cfg->total_dirs+1)))==NULL) + return allocerr(error, maxerrlen, fname, "dirs", sizeof(dir_t *)*(cfg->total_dirs+1)); cfg->total_dirs = 0; for(uint i=0; dir_list[i] != NULL; i++) { @@ -362,11 +337,8 @@ BOOL read_file_cfg(scfg_t* cfg, char* error, size_t maxerrlen) str_list_t sec_list = iniGetParsedSectionList(sections, "text:"); cfg->total_txtsecs = (uint16_t)strListCount(sec_list); - if(cfg->total_txtsecs) { - if((cfg->txtsec=(txtsec_t **)malloc(sizeof(txtsec_t *)*cfg->total_txtsecs))==NULL) - return allocerr(error, maxerrlen, fname, "txtsecs", sizeof(txtsec_t *)*cfg->total_txtsecs); - } else - cfg->txtsec=NULL; + if((cfg->txtsec=(txtsec_t **)malloc(sizeof(txtsec_t *)*cfg->total_txtsecs))==NULL) + return allocerr(error, maxerrlen, fname, "txtsecs", sizeof(txtsec_t *)*cfg->total_txtsecs); for(uint i=0; i < cfg->total_txtsecs; i++) { const char* name = sec_list[i]; @@ -416,11 +388,8 @@ BOOL read_xtrn_cfg(scfg_t* cfg, char* error, size_t maxerrlen) str_list_t list = iniGetParsedSectionList(sections, "editor:"); cfg->total_xedits = (uint16_t)strListCount(list); - if(cfg->total_xedits) { - if((cfg->xedit=(xedit_t **)malloc(sizeof(xedit_t *)*cfg->total_xedits))==NULL) - return allocerr(error, maxerrlen, fname, "xedits", sizeof(xedit_t *)*cfg->total_xedits); - } else - cfg->xedit=NULL; + if((cfg->xedit=(xedit_t **)malloc(sizeof(xedit_t *)*cfg->total_xedits))==NULL) + return allocerr(error, maxerrlen, fname, "xedits", sizeof(xedit_t *)*cfg->total_xedits); for(uint i=0; i<cfg->total_xedits; i++) { const char* name = list[i]; @@ -449,12 +418,8 @@ BOOL read_xtrn_cfg(scfg_t* cfg, char* error, size_t maxerrlen) list = iniGetParsedSectionList(sections, "sec:"); cfg->total_xtrnsecs = (uint16_t)strListCount(list); - if(cfg->total_xtrnsecs) { - if((cfg->xtrnsec=(xtrnsec_t **)malloc(sizeof(xtrnsec_t *)*cfg->total_xtrnsecs)) - ==NULL) - return allocerr(error, maxerrlen, fname, "xtrnsecs", sizeof(xtrnsec_t *)*cfg->total_xtrnsecs); - } else - cfg->xtrnsec=NULL; + if((cfg->xtrnsec=(xtrnsec_t **)malloc(sizeof(xtrnsec_t *)*cfg->total_xtrnsecs))==NULL) + return allocerr(error, maxerrlen, fname, "xtrnsecs", sizeof(xtrnsec_t *)*cfg->total_xtrnsecs); for(uint i=0; i<cfg->total_xtrnsecs; i++) { const char* name = list[i]; @@ -476,11 +441,8 @@ BOOL read_xtrn_cfg(scfg_t* cfg, char* error, size_t maxerrlen) list = iniGetParsedSectionList(sections, "prog:"); cfg->total_xtrns = (uint16_t)strListCount(list); - if(cfg->total_xtrns) { - if((cfg->xtrn=(xtrn_t **)malloc(sizeof(xtrn_t *)*cfg->total_xtrns))==NULL) - return allocerr(error, maxerrlen, fname, "xtrns", sizeof(xtrn_t *)*cfg->total_xtrns); - } else - cfg->xtrn=NULL; + if((cfg->xtrn=(xtrn_t **)malloc(sizeof(xtrn_t *)*cfg->total_xtrns))==NULL) + return allocerr(error, maxerrlen, fname, "xtrns", sizeof(xtrn_t *)*cfg->total_xtrns); cfg->total_xtrns = 0; for(uint i=0; list[i] != NULL; i++) { @@ -529,11 +491,8 @@ BOOL read_xtrn_cfg(scfg_t* cfg, char* error, size_t maxerrlen) list = iniGetParsedSectionList(sections, "event:"); cfg->total_events = (uint16_t)strListCount(list); - if(cfg->total_events) { - if((cfg->event=(event_t **)malloc(sizeof(event_t *)*cfg->total_events))==NULL) - return allocerr(error, maxerrlen, fname, "events", sizeof(event_t *)*cfg->total_events); - } else - cfg->event=NULL; + if((cfg->event=(event_t **)malloc(sizeof(event_t *)*cfg->total_events))==NULL) + return allocerr(error, maxerrlen, fname, "events", sizeof(event_t *)*cfg->total_events); for(uint i=0; i<cfg->total_events; i++) { const char* name = list[i]; @@ -567,11 +526,8 @@ BOOL read_xtrn_cfg(scfg_t* cfg, char* error, size_t maxerrlen) list = iniGetParsedSectionList(sections, "native:"); cfg->total_natvpgms = (uint16_t)strListCount(list); - if(cfg->total_natvpgms) { - if((cfg->natvpgm=(natvpgm_t **)malloc(sizeof(natvpgm_t *)*cfg->total_natvpgms))==NULL) - return allocerr(error, maxerrlen, fname, "natvpgms", sizeof(natvpgm_t *)*cfg->total_natvpgms); - } else - cfg->natvpgm=NULL; + if((cfg->natvpgm=(natvpgm_t **)malloc(sizeof(natvpgm_t *)*cfg->total_natvpgms))==NULL) + return allocerr(error, maxerrlen, fname, "natvpgms", sizeof(natvpgm_t *)*cfg->total_natvpgms); for(uint i=0; i<cfg->total_natvpgms; i++) { const char* name = list[i]; @@ -589,11 +545,8 @@ BOOL read_xtrn_cfg(scfg_t* cfg, char* error, size_t maxerrlen) list = iniGetParsedSectionList(sections, "hotkey:"); cfg->total_hotkeys = (uint16_t)strListCount(list); - if(cfg->total_hotkeys) { - if((cfg->hotkey=(hotkey_t **)malloc(sizeof(hotkey_t *)*cfg->total_hotkeys))==NULL) - return allocerr(error, maxerrlen, fname, "hotkeys", sizeof(hotkey_t *)*cfg->total_hotkeys); - } else - cfg->hotkey=NULL; + if((cfg->hotkey=(hotkey_t **)malloc(sizeof(hotkey_t *)*cfg->total_hotkeys))==NULL) + return allocerr(error, maxerrlen, fname, "hotkeys", sizeof(hotkey_t *)*cfg->total_hotkeys); for(uint i=0; i<cfg->total_hotkeys; i++) { const char* section = list[i]; @@ -646,11 +599,8 @@ BOOL read_chat_cfg(scfg_t* cfg, char* error, size_t maxerrlen) str_list_t list = iniGetParsedSectionList(sections, "guru:"); cfg->total_gurus = (uint16_t)strListCount(list); - if(cfg->total_gurus) { - if((cfg->guru=(guru_t **)malloc(sizeof(guru_t *)*cfg->total_gurus))==NULL) - return allocerr(error, maxerrlen, fname, "gurus", sizeof(guru_t *)*cfg->total_gurus); - } else - cfg->guru=NULL; + if((cfg->guru=(guru_t **)malloc(sizeof(guru_t *)*cfg->total_gurus))==NULL) + return allocerr(error, maxerrlen, fname, "gurus", sizeof(guru_t *)*cfg->total_gurus); for(uint i=0; i<cfg->total_gurus; i++) { const char* name = list[i]; @@ -674,11 +624,8 @@ BOOL read_chat_cfg(scfg_t* cfg, char* error, size_t maxerrlen) list = iniGetParsedSectionList(sections, "actions:"); cfg->total_actsets = (uint16_t)strListCount(list); - if(cfg->total_actsets) { - if((cfg->actset=(actset_t **)malloc(sizeof(actset_t *)*cfg->total_actsets))==NULL) - return allocerr(error, maxerrlen, fname, "actsets", sizeof(actset_t *)*cfg->total_actsets); - } else - cfg->actset=NULL; + if((cfg->actset=(actset_t **)malloc(sizeof(actset_t *)*cfg->total_actsets))==NULL) + return allocerr(error, maxerrlen, fname, "actsets", sizeof(actset_t *)*cfg->total_actsets); cfg->total_chatacts = 0; for(uint i=0; i<cfg->total_actsets; i++) { @@ -713,11 +660,8 @@ BOOL read_chat_cfg(scfg_t* cfg, char* error, size_t maxerrlen) list = iniGetParsedSectionList(sections, "chan:"); cfg->total_chans = (uint16_t)strListCount(list); - if(cfg->total_chans) { - if((cfg->chan=(chan_t **)malloc(sizeof(chan_t *)*cfg->total_chans))==NULL) - return allocerr(error, maxerrlen, fname, "chans", sizeof(chan_t *)*cfg->total_chans); - } else - cfg->chan=NULL; + if((cfg->chan=(chan_t **)malloc(sizeof(chan_t *)*cfg->total_chans))==NULL) + return allocerr(error, maxerrlen, fname, "chans", sizeof(chan_t *)*cfg->total_chans); for(uint i=0; i<cfg->total_chans; i++) { const char* name = list[i]; @@ -747,11 +691,8 @@ BOOL read_chat_cfg(scfg_t* cfg, char* error, size_t maxerrlen) list = iniGetParsedSectionList(sections, "pager:"); cfg->total_pages = (uint16_t)strListCount(list); - if(cfg->total_pages) { - if((cfg->page=(page_t **)malloc(sizeof(page_t *)*cfg->total_pages))==NULL) - return allocerr(error, maxerrlen, fname, "pages", sizeof(page_t *)*cfg->total_pages); - } else - cfg->page=NULL; + if((cfg->page=(page_t **)malloc(sizeof(page_t *)*cfg->total_pages))==NULL) + return allocerr(error, maxerrlen, fname, "pages", sizeof(page_t *)*cfg->total_pages); for(uint i=0; i<cfg->total_pages; i++) { const char* name = list[i]; -- GitLab