diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c index 93037dc07aa0d5e15584877ced3bcd2e362a0e5f..d901716a17366d8a79f0cace18e6d6ad9d0d40e1 100644 --- a/src/sbbs3/mailsrvr.c +++ b/src/sbbs3/mailsrvr.c @@ -877,33 +877,40 @@ static ulong sockmimetext(SOCKET socket, const char* prot, CRYPT_SESSION sess, s static ulong sockmsgtxt(SOCKET socket, const char* prot, CRYPT_SESSION sess, smbmsg_t* msg, char* msgtxt, ulong maxlines) { - char filepath[MAX_PATH+1]; + char dirname[MAX_PATH + 1]; + char filepath[MAX_PATH + 1]; ulong retval; char* boundary=NULL; - unsigned i; str_list_t file_list=NULL; - str_list_t split; if(msg->hdr.auxattr&MSG_FILEATTACH) { + if(msg->idx.to != 0) + SAFEPRINTF2(dirname, "%sfile/%04u.in", scfg.data_dir, msg->idx.to); + else + SAFEPRINTF2(dirname, "%sfile/%04u.out", scfg.data_dir, msg->idx.from); boundary = mimegetboundary(); file_list = strListInit(); - /* Parse subject (if necessary) */ - if(!strListCount(file_list)) { /* filename(s) stored in subject */ - split=strListSplitCopy(NULL,msg->subj," "); - if(split!=NULL) { - for(i=0;split[i];i++) { - if(msg->idx.to!=0) - SAFEPRINTF3(filepath,"%sfile/%04u.in/%s" - ,scfg.data_dir,msg->idx.to,getfname(truncsp(split[i]))); - else - SAFEPRINTF3(filepath,"%sfile/%04u.out/%s" - ,scfg.data_dir,msg->idx.from,getfname(truncsp(split[i]))); - strListPush(&file_list,filepath); - } - strListFree(&split); + /* filename(s) in subject */ + char* p = msg->subj; + SKIP_WHITESPACE(p); + while(*p != '\0') { + char delim = ' '; + if(*p == '"') { + delim = '"'; + p++; } + char* tp = strchr(p, delim); + if(tp == NULL && delim != ' ') + break; + *tp = '\0'; + SAFEPRINTF2(filepath, "%s/%s", dirname, getfname(truncsp(p))); + strListPush(&file_list, filepath); + if(tp == NULL) + break; + p = tp + 1; + SKIP_WHITESPACE(p); } }