From cda4490c9ba84eee9db2e8c455338210956cd94e Mon Sep 17 00:00:00 2001 From: deuce <> Date: Wed, 7 Mar 2018 23:34:21 +0000 Subject: [PATCH] Return an empty LIST or NLST listing if parsepath() fails. --- src/sbbs3/ftpsrvr.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c index b4a8a47996..879439ca6b 100644 --- a/src/sbbs3/ftpsrvr.c +++ b/src/sbbs3/ftpsrvr.c @@ -4505,21 +4505,31 @@ static void ctrl_thread(void* arg) SKIP_WHITESPACE(p); } - parsepath(&p,&user,&client,&lib,&dir); - filespec=p; - if(*filespec==0) - filespec="*"; - if((fp=fopen(ftp_tmpfname(fname,"lst",sock),"w+b"))==NULL) { lprintf(LOG_ERR,"%04d !ERROR %d opening %s",sock,errno,fname); sockprintf(sock,sess, "451 Insufficient system storage"); continue; } + sockprintf(sock,sess,"150 Opening ASCII mode data connection for /bin/ls."); + + if (parsepath(&p,&user,&client,&lib,&dir) == -1) { + /* Empty list */ + fclose(fp); + filexfer(&data_addr,sock,sess,pasv_sock,pasv_sess,&data_sock,&data_sess,fname,0L + ,&transfer_inprogress,&transfer_aborted + ,TRUE /* delfile */ + ,TRUE /* tmpfile */ + ,&lastactive,&user,&client,dir,FALSE,FALSE,FALSE,NULL,protection); + continue; + } + filespec=p; + if(*filespec==0) + filespec="*"; + if(!strnicmp(cmd, "LIST", 4)) detail=TRUE; else detail=FALSE; - sockprintf(sock,sess,"150 Opening ASCII mode data connection for /bin/ls."); now=time(NULL); if(localtime_r(&now,&cur_tm)==NULL) memset(&cur_tm,0,sizeof(cur_tm)); -- GitLab