From 9af263c4c986597e20596741f4a3f4ca93c81c0c Mon Sep 17 00:00:00 2001 From: rswindell <> Date: Fri, 16 Apr 2004 08:07:36 +0000 Subject: [PATCH] Fixed segfault: don't access scfg.faddr[0] if scfg.total_faddrs==0. --- src/sbbs3/sbbsecho.c | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/src/sbbs3/sbbsecho.c b/src/sbbs3/sbbsecho.c index 9c20195f15..c635abc8ef 100644 --- a/src/sbbs3/sbbsecho.c +++ b/src/sbbs3/sbbsecho.c @@ -78,7 +78,7 @@ two_two_t two_two; two_plus_t two_plus; BOOL twit_list; -faddr_t sys_faddr; +faddr_t sys_faddr = {1,1,1,0}; /* Default system address: 1:1/1.0 */ config_t cfg; scfg_t scfg; char revision[16]; @@ -300,20 +300,13 @@ int execute(char *cmdline) faddr_t getsysfaddr(short zone) { int i; - faddr_t sysfaddr; - - sysfaddr.zone=sysfaddr.net=sysfaddr.node=1; - sysfaddr.point=0; - if(!scfg.total_faddrs) - return(sys_faddr); - sysfaddr=scfg.faddr[0]; - if(scfg.total_faddrs==1) - return(sysfaddr); + for(i=0;i<scfg.total_faddrs;i++) if(scfg.faddr[i].zone==zone) return(scfg.faddr[i]); - return(sysfaddr); + return(sys_faddr); } + /****************************************************************************** This function creates or appends on existing Binkley compatible .?LO file attach file. @@ -338,7 +331,7 @@ int write_flofile(char *attachment, faddr_t dest) else if(attr&ATTR_HOLD) ch='h'; else if(attr&ATTR_DIRECT) ch='d'; else ch='f'; - if(dest.zone==scfg.faddr[0].zone) /* Default zone, use default outbound */ + if(dest.zone==sys_faddr.zone) /* Default zone, use default outbound */ strcpy(outbound,cfg.outbound); else { /* Inter-zone outbound is OUTBOUND.XXX */ sprintf(outbound,"%.*s.%03x" @@ -1679,7 +1672,7 @@ void pack_bundle(char *infile,faddr_t dest) logprintf("Routing %s to %s",infile,faddrtoa(&dest,NULL)); } - if(dest.zone==scfg.faddr[0].zone) /* Default zone, use default outbound */ + if(dest.zone==sys_faddr.zone) /* Default zone, use default outbound */ strcpy(outbound,cfg.outbound); else { /* Inter-zone outbound is OUTBOUND.XXX */ sprintf(outbound,"%.*s.%03x" @@ -1714,8 +1707,8 @@ void pack_bundle(char *infile,faddr_t dest) if(dest.point && !(misc&FLO_MAILER)) sprintf(fname,"%s%04hxp%03hx.%s",outbound,0,(short)dest.point,day); else - sprintf(fname,"%s%04hx%04hx.%s",outbound,(short)(scfg.faddr[0].net-dest.net) - ,(short)(scfg.faddr[0].node-dest.node),day); + sprintf(fname,"%s%04hx%04hx.%s",outbound,(short)(sys_faddr.net-dest.net) + ,(short)(sys_faddr.node-dest.node),day); for(i='0';i<='Z';i++) { if(i==':') i='A'; @@ -4209,10 +4202,7 @@ int main(int argc, char **argv) sprintf(str,"%stwitlist.cfg",scfg.ctrl_dir); twit_list=fexist(str); - if(scfg.total_faddrs<1) { - sys_faddr.zone=sys_faddr.net=sys_faddr.node=1; - sys_faddr.point=0; } - else + if(scfg.total_faddrs) sys_faddr=scfg.faddr[0]; if(!cfg.cfgfile[0]) @@ -5015,7 +5005,7 @@ int main(int argc, char **argv) else if(attr&ATTR_HOLD) ch='h'; else if(attr&ATTR_DIRECT) ch='d'; else ch='o'; - if(addr.zone==scfg.faddr[0].zone) /* Default zone, use default outbound */ + if(addr.zone==sys_faddr.zone) /* Default zone, use default outbound */ strcpy(outbound,cfg.outbound); else { /* Inter-zone outbound is OUTBOUND.XXX */ sprintf(outbound,"%.*s.%03x" -- GitLab