Commit 4e1ca83a authored by Rob Swindell's avatar Rob Swindell 💬
Browse files

Fix possible crash when no extractable file types are configured in SCFG

If libarchive couldn't extract a QWK or REP packet, we'd fallback to searching
for a match among the configured extractable file types and if no extension/type
match was found, default to the first configured extractable file type
(even if there wasn't one) which would result in a NULL pointer dereference
and most likely a crash. Instead, if no matching configured extractable
file type is found, just log a warning message and don't continue with the
extraction attempt. With SBBS v3.19+, it's totally valid/legit to have no
extractable file types configured in SCFG and things "just work" (using
libarchive).
parent ffc8d5db
......@@ -87,8 +87,10 @@ bool sbbs_t::pack_qwk(char *packet, ulong *msgcnt, bool prepack)
if(!stricmp(cfg.fextr[k]->ext,useron.tmpext)
&& chk_ar(cfg.fextr[k]->ar,&useron,&client))
break;
if(k>=cfg.total_fextrs)
k=0;
if(k>=cfg.total_fextrs) {
lprintf(LOG_WARNING, "No extractable file type matching user's QWK packet type: %s", useron.tmpext);
return false;
}
p=cmdstr(cfg.fextr[k]->cmd,str,ALLFILES,NULL);
if((i=external(p,ex))==0)
preqwk=1;
......
......@@ -85,8 +85,10 @@ bool sbbs_t::unpack_rep(char* repfile)
for(k=0;k<cfg.total_fextrs;k++)
if(!stricmp(cfg.fextr[k]->ext,useron.tmpext) && chk_ar(cfg.fextr[k]->ar,&useron,&client))
break;
if(k>=cfg.total_fextrs)
k=0;
if(k>=cfg.total_fextrs) {
lprintf(LOG_WARNING, "No extractable file type matching user's REP packet type: %s", useron.tmpext);
return false;
}
ex=EX_STDOUT;
if(online!=ON_REMOTE)
ex|=EX_OFFLINE;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment