Skip to content
Snippets Groups Projects
Commit df54916b authored by rswindell's avatar rswindell
Browse files

Solved potential NULL pointer dereference in free_ functions.

Added FREE_ALLOC macro (to free cfg buffers malloced with get_alloc).
parent 735de060
Branches
Tags
No related merge requests found
......@@ -900,48 +900,86 @@ BOOL read_msgs_cfg(scfg_t* cfg, read_cfg_text_t* txt)
void free_node_cfg(scfg_t* cfg)
{
FREE_AND_NULL(cfg->mdm_result);
int i;
if(cfg->mdm_result!=NULL) {
for(i=0;i<cfg->mdm_results;i++) {
FREE_ALLOC(cfg->mdm_result[i].str);
}
FREE_AND_NULL(cfg->mdm_result);
}
for(i=0;i<10;i++) { /* WFC 0-9 DOS commands */
FREE_ALLOC(cfg->wfc_cmd[i]);
}
for(i=0;i<12;i++) { /* WFC F1-F12 shrinking DOS cmds */
FREE_ALLOC(cfg->wfc_scmd[i]);
}
}
void free_main_cfg(scfg_t* cfg)
{
int i;
for(i=0;i<cfg->sys_nodes;i++)
FREE_AND_NULL(cfg->node_path[i]);
FREE_AND_NULL(cfg->node_path);
for(i=0;i<cfg->total_shells;i++)
FREE_AND_NULL(cfg->shell[i]);
FREE_AND_NULL(cfg->shell);
if(cfg->node_path!=NULL) {
for(i=0;i<cfg->sys_nodes;i++)
FREE_AND_NULL(cfg->node_path[i]);
FREE_AND_NULL(cfg->node_path);
}
if(cfg->shell!=NULL) {
for(i=0;i<cfg->total_shells;i++) {
FREE_ALLOC(cfg->shell[i]->name);
FREE_AND_NULL(cfg->shell[i]);
}
FREE_AND_NULL(cfg->shell);
}
}
void free_msgs_cfg(scfg_t* cfg)
{
int i;
for(i=0;i<cfg->total_grps;i++)
FREE_AND_NULL(cfg->grp[i]);
FREE_AND_NULL(cfg->grp);
if(cfg->grp!=NULL) {
for(i=0;i<cfg->total_grps;i++) {
FREE_ALLOC(cfg->grp[i]->lname);
FREE_ALLOC(cfg->grp[i]->sname);
FREE_AND_NULL(cfg->grp[i]);
}
FREE_AND_NULL(cfg->grp);
}
for(i=0;i<cfg->total_subs;i++)
FREE_AND_NULL(cfg->sub[i]);
FREE_AND_NULL(cfg->sub);
if(cfg->sub!=NULL) {
for(i=0;i<cfg->total_subs;i++) {
FREE_ALLOC(cfg->sub[i]->lname);
FREE_ALLOC(cfg->sub[i]->sname);
FREE_ALLOC(cfg->sub[i]->qwkname);
FREE_AND_NULL(cfg->sub[i]);
}
FREE_AND_NULL(cfg->sub);
}
FREE_AND_NULL(cfg->faddr);
cfg->total_faddrs=0;
for(i=0;i<cfg->total_qhubs;i++) {
FREE_AND_NULL(cfg->qhub[i]->mode);
FREE_AND_NULL(cfg->qhub[i]->conf);
FREE_AND_NULL(cfg->qhub[i]->sub);
FREE_AND_NULL(cfg->qhub[i]); }
FREE_AND_NULL(cfg->qhub);
cfg->qhub=NULL;
for(i=0;i<cfg->total_phubs;i++)
FREE_AND_NULL(cfg->phub[i]);
FREE_AND_NULL(cfg->phub);
if(cfg->qhub!=NULL) {
for(i=0;i<cfg->total_qhubs;i++) {
FREE_ALLOC(cfg->qhub[i]->call);
FREE_ALLOC(cfg->qhub[i]->pack);
FREE_ALLOC(cfg->qhub[i]->unpack);
FREE_AND_NULL(cfg->qhub[i]->mode);
FREE_AND_NULL(cfg->qhub[i]->conf);
FREE_AND_NULL(cfg->qhub[i]->sub);
FREE_AND_NULL(cfg->qhub[i]); }
FREE_AND_NULL(cfg->qhub);
}
if(cfg->phub!=NULL) {
for(i=0;i<cfg->total_phubs;i++) {
FREE_ALLOC(cfg->phub[i]->call);
FREE_AND_NULL(cfg->phub[i]);
}
FREE_AND_NULL(cfg->phub);
}
}
/************************************************************/
......
......@@ -1097,70 +1097,141 @@ void free_file_cfg(scfg_t* cfg)
{
uint i;
for(i=0;i<cfg->total_fextrs;i++)
FREE_AND_NULL(cfg->fextr[i]);
FREE_AND_NULL(cfg->fextr);
for(i=0;i<cfg->total_fcomps;i++)
FREE_AND_NULL(cfg->fcomp[i]);
FREE_AND_NULL(cfg->fcomp);
for(i=0;i<cfg->total_fviews;i++)
FREE_AND_NULL(cfg->fview[i]);
FREE_AND_NULL(cfg->fview);
for(i=0;i<cfg->total_ftests;i++)
FREE_AND_NULL(cfg->ftest[i]);
FREE_AND_NULL(cfg->ftest);
for(i=0;i<cfg->total_dlevents;i++)
FREE_AND_NULL(cfg->dlevent[i]);
FREE_AND_NULL(cfg->dlevent);
for(i=0;i<cfg->total_prots;i++)
FREE_AND_NULL(cfg->prot[i]);
FREE_AND_NULL(cfg->prot);
for(i=0;i<cfg->altpaths;i++)
FREE_AND_NULL(cfg->altpath[i]);
FREE_AND_NULL(cfg->altpath);
if(cfg->fextr!=NULL) {
for(i=0;i<cfg->total_fextrs;i++) {
FREE_ALLOC(cfg->fextr[i]->cmd);
FREE_AND_NULL(cfg->fextr[i]);
}
FREE_AND_NULL(cfg->fextr);
}
for(i=0;i<cfg->total_libs;i++)
FREE_AND_NULL(cfg->lib[i]);
FREE_AND_NULL(cfg->lib);
if(cfg->fcomp!=NULL) {
for(i=0;i<cfg->total_fcomps;i++) {
FREE_ALLOC(cfg->fcomp[i]->cmd);
FREE_AND_NULL(cfg->fcomp[i]);
}
FREE_AND_NULL(cfg->fcomp);
}
for(i=0;i<cfg->total_dirs;i++)
FREE_AND_NULL(cfg->dir[i]);
FREE_AND_NULL(cfg->dir);
if(cfg->fview!=NULL) {
for(i=0;i<cfg->total_fviews;i++) {
FREE_ALLOC(cfg->fview[i]->cmd);
FREE_AND_NULL(cfg->fview[i]);
}
FREE_AND_NULL(cfg->fview);
}
if(cfg->ftest!=NULL) {
for(i=0;i<cfg->total_ftests;i++) {
FREE_ALLOC(cfg->ftest[i]->cmd);
FREE_ALLOC(cfg->ftest[i]->workstr);
FREE_AND_NULL(cfg->ftest[i]);
}
FREE_AND_NULL(cfg->ftest);
}
if(cfg->dlevent!=NULL) {
for(i=0;i<cfg->total_dlevents;i++) {
FREE_ALLOC(cfg->dlevent[i]->cmd);
FREE_ALLOC(cfg->dlevent[i]->workstr);
FREE_AND_NULL(cfg->dlevent[i]);
}
FREE_AND_NULL(cfg->dlevent);
}
if(cfg->prot!=NULL) {
for(i=0;i<cfg->total_prots;i++) {
FREE_ALLOC(cfg->prot[i]->name);
FREE_ALLOC(cfg->prot[i]->ulcmd);
FREE_ALLOC(cfg->prot[i]->dlcmd);
FREE_ALLOC(cfg->prot[i]->batulcmd);
FREE_ALLOC(cfg->prot[i]->batdlcmd);
FREE_ALLOC(cfg->prot[i]->blindcmd);
FREE_ALLOC(cfg->prot[i]->bicmd);
FREE_AND_NULL(cfg->prot[i]);
}
FREE_AND_NULL(cfg->prot);
}
if(cfg->altpath!=NULL) {
for(i=0;i<cfg->altpaths;i++)
FREE_AND_NULL(cfg->altpath[i]);
FREE_AND_NULL(cfg->altpath);
}
if(cfg->lib!=NULL) {
for(i=0;i<cfg->total_libs;i++) {
FREE_ALLOC(cfg->lib[i]->lname);
FREE_ALLOC(cfg->lib[i]->sname);
FREE_AND_NULL(cfg->lib[i]);
}
FREE_AND_NULL(cfg->lib);
}
if(cfg->dir!=NULL) {
for(i=0;i<cfg->total_dirs;i++) {
FREE_ALLOC(cfg->dir[i]->lname);
FREE_ALLOC(cfg->dir[i]->sname);
FREE_ALLOC(cfg->dir[i]->exts);
FREE_ALLOC(cfg->dir[i]->upload_sem);
FREE_AND_NULL(cfg->dir[i]);
}
FREE_AND_NULL(cfg->dir);
}
for(i=0;i<cfg->total_txtsecs;i++)
FREE_AND_NULL(cfg->txtsec[i]);
FREE_AND_NULL(cfg->txtsec);
if(cfg->txtsec!=NULL) {
for(i=0;i<cfg->total_txtsecs;i++) {
FREE_ALLOC(cfg->txtsec[i]->name);
FREE_AND_NULL(cfg->txtsec[i]);
}
FREE_AND_NULL(cfg->txtsec);
}
}
void free_chat_cfg(scfg_t* cfg)
{
int i;
for(i=0;i<cfg->total_actsets;i++)
FREE_AND_NULL(cfg->actset[i]);
FREE_AND_NULL(cfg->actset);
for(i=0;i<cfg->total_chatacts;i++)
FREE_AND_NULL(cfg->chatact[i]);
FREE_AND_NULL(cfg->chatact);
if(cfg->actset!=NULL) {
for(i=0;i<cfg->total_actsets;i++) {
FREE_ALLOC(cfg->actset[i]->name);
FREE_AND_NULL(cfg->actset[i]);
}
FREE_AND_NULL(cfg->actset);
}
if(cfg->chatact!=NULL) {
for(i=0;i<cfg->total_chatacts;i++) {
FREE_ALLOC(cfg->chatact[i]->cmd);
FREE_ALLOC(cfg->chatact[i]->out);
FREE_AND_NULL(cfg->chatact[i]);
}
FREE_AND_NULL(cfg->chatact);
}
for(i=0;i<cfg->total_chans;i++)
FREE_AND_NULL(cfg->chan[i]);
FREE_AND_NULL(cfg->chan);
if(cfg->chan!=NULL) {
for(i=0;i<cfg->total_chans;i++) {
FREE_ALLOC(cfg->chan[i]->name);
FREE_AND_NULL(cfg->chan[i]);
}
FREE_AND_NULL(cfg->chan);
}
for(i=0;i<cfg->total_gurus;i++)
FREE_AND_NULL(cfg->guru[i]);
FREE_AND_NULL(cfg->guru);
if(cfg->guru!=NULL) {
for(i=0;i<cfg->total_gurus;i++) {
FREE_ALLOC(cfg->guru[i]->name);
FREE_AND_NULL(cfg->guru[i]);
}
FREE_AND_NULL(cfg->guru);
}
for(i=0;i<cfg->total_pages;i++)
FREE_AND_NULL(cfg->page[i]);
FREE_AND_NULL(cfg->page);
if(cfg->page!=NULL) {
for(i=0;i<cfg->total_pages;i++) {
FREE_ALLOC(cfg->page[i]->cmd);
FREE_AND_NULL(cfg->page[i]);
}
FREE_AND_NULL(cfg->page);
}
}
......@@ -1168,24 +1239,55 @@ void free_xtrn_cfg(scfg_t* cfg)
{
int i;
for(i=0;i<cfg->total_swaps;i++)
FREE_AND_NULL(cfg->swap[i]);
FREE_AND_NULL(cfg->swap);
for(i=0;i<cfg->total_xedits;i++)
FREE_AND_NULL(cfg->xedit[i]);
FREE_AND_NULL(cfg->xedit);
for(i=0;i<cfg->total_xtrnsecs;i++)
FREE_AND_NULL(cfg->xtrnsec[i]);
FREE_AND_NULL(cfg->xtrnsec);
if(cfg->swap!=NULL) {
for(i=0;i<cfg->total_swaps;i++) {
FREE_ALLOC(cfg->swap[i]->cmd);
FREE_AND_NULL(cfg->swap[i]);
}
FREE_AND_NULL(cfg->swap);
}
if(cfg->xedit!=NULL) {
for(i=0;i<cfg->total_xedits;i++) {
FREE_ALLOC(cfg->xedit[i]->name);
FREE_ALLOC(cfg->xedit[i]->lcmd);
FREE_ALLOC(cfg->xedit[i]->rcmd);
FREE_AND_NULL(cfg->xedit[i]);
}
FREE_AND_NULL(cfg->xedit);
}
for(i=0;i<cfg->total_xtrns;i++)
FREE_AND_NULL(cfg->xtrn[i]);
FREE_AND_NULL(cfg->xtrn);
if(cfg->xtrnsec!=NULL) {
for(i=0;i<cfg->total_xtrnsecs;i++) {
FREE_ALLOC(cfg->xtrnsec[i]->name);
FREE_AND_NULL(cfg->xtrnsec[i]);
}
FREE_AND_NULL(cfg->xtrnsec);
}
if(cfg->xtrn!=NULL) {
for(i=0;i<cfg->total_xtrns;i++) {
FREE_ALLOC(cfg->xtrn[i]->name);
FREE_ALLOC(cfg->xtrn[i]->cmd);
FREE_ALLOC(cfg->xtrn[i]->clean);
FREE_AND_NULL(cfg->xtrn[i]);
}
FREE_AND_NULL(cfg->xtrn);
}
for(i=0;i<cfg->total_events;i++)
FREE_AND_NULL(cfg->event[i]);
FREE_AND_NULL(cfg->event);
if(cfg->event!=NULL) {
for(i=0;i<cfg->total_events;i++) {
FREE_ALLOC(cfg->event[i]->cmd);
FREE_AND_NULL(cfg->event[i]);
}
FREE_AND_NULL(cfg->event);
}
if(cfg->natvpgm!=NULL) {
for(i=0;i<cfg->total_natvpgms;i++) {
FREE_ALLOC(cfg->natvpgm[i]->name);
FREE_AND_NULL(cfg->natvpgm[i]);
}
FREE_AND_NULL(cfg->natvpgm);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment