Skip to content
Snippets Groups Projects
Commit 8c28acab authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Fix exception (crash) when sending file attachments

The new subject line parsing (with quoted-filename support) had a NULL-pointer deref built-in.

Also fixed a few Coverity-reported issues.
parent ef86978b
No related branches found
No related tags found
1 merge request!463MRC mods by Codefenix (2024-10-20)
Pipeline #1324 passed
...@@ -902,8 +902,10 @@ static ulong sockmsgtxt(SOCKET socket, const char* prot, CRYPT_SESSION sess, smb ...@@ -902,8 +902,10 @@ static ulong sockmsgtxt(SOCKET socket, const char* prot, CRYPT_SESSION sess, smb
p++; p++;
} }
char* tp = strchr(p, delim); char* tp = strchr(p, delim);
if(tp == NULL && delim != ' ') if(tp == NULL) {
if(delim != ' ')
break; break;
} else
*tp = '\0'; *tp = '\0';
SAFEPRINTF2(filepath, "%s/%s", dirname, getfname(truncsp(p))); SAFEPRINTF2(filepath, "%s/%s", dirname, getfname(truncsp(p)));
strListPush(&file_list, filepath); strListPush(&file_list, filepath);
...@@ -2699,6 +2701,9 @@ static void parse_mail_address(char* p ...@@ -2699,6 +2701,9 @@ static void parse_mail_address(char* p
char* tp; char* tp;
char tmp[256]; char tmp[256];
if(p == NULL || name == NULL || addr == NULL)
return;
SKIP_WHITESPACE(p); SKIP_WHITESPACE(p);
/* Get the address */ /* Get the address */
...@@ -4223,7 +4228,7 @@ static void smtp_thread(void* arg) ...@@ -4223,7 +4228,7 @@ static void smtp_thread(void* arg)
lprintf(LOG_DEBUG,"%04d SMTP CRAM-MD5 challenge: %s" lprintf(LOG_DEBUG,"%04d SMTP CRAM-MD5 challenge: %s"
,socket,challenge); ,socket,challenge);
#endif #endif
b64_encode(str,sizeof(str),challenge,0); b64_encode(str,sizeof(str),challenge,strlen(challenge));
sockprintf(socket,client.protocol,session,"334 %s",str); sockprintf(socket,client.protocol,session,"334 %s",str);
if((rd=sockreadline(socket, client.protocol, session, buf, sizeof(buf)))<1) { if((rd=sockreadline(socket, client.protocol, session, buf, sizeof(buf)))<1) {
lprintf(LOG_WARNING,"%04d %s %s !Missing AUTH CRAM-MD5 response", socket, client.protocol, client_id); lprintf(LOG_WARNING,"%04d %s %s !Missing AUTH CRAM-MD5 response", socket, client.protocol, client_id);
...@@ -5708,7 +5713,7 @@ static void sendmail_thread(void* arg) ...@@ -5708,7 +5713,7 @@ static void sendmail_thread(void* arg)
} }
switch(startup->options&MAIL_OPT_RELAY_AUTH_MASK) { switch(startup->options&MAIL_OPT_RELAY_AUTH_MASK) {
case MAIL_OPT_RELAY_AUTH_LOGIN: case MAIL_OPT_RELAY_AUTH_LOGIN:
b64_encode(p=resp,sizeof(resp),startup->relay_user,0); b64_encode(p=resp,sizeof(resp),startup->relay_user,strlen(startup->relay_user));
break; break;
case MAIL_OPT_RELAY_AUTH_CRAM_MD5: case MAIL_OPT_RELAY_AUTH_CRAM_MD5:
p=buf; p=buf;
...@@ -5729,7 +5734,7 @@ static void sendmail_thread(void* arg) ...@@ -5729,7 +5734,7 @@ static void sendmail_thread(void* arg)
MD5_calc(digest,md5_data,sizeof(secret)+sizeof(digest)); MD5_calc(digest,md5_data,sizeof(secret)+sizeof(digest));
safe_snprintf(buf,sizeof(buf),"%s %s",startup->relay_user,MD5_hex((BYTE*)str,digest)); safe_snprintf(buf,sizeof(buf),"%s %s",startup->relay_user,MD5_hex((BYTE*)str,digest));
b64_encode(p=resp,sizeof(resp),buf,0); b64_encode(p=resp,sizeof(resp),buf,strlen(buf));
break; break;
default: default:
p="<unknown>"; p="<unknown>";
...@@ -5744,7 +5749,7 @@ static void sendmail_thread(void* arg) ...@@ -5744,7 +5749,7 @@ static void sendmail_thread(void* arg)
} }
switch(startup->options&MAIL_OPT_RELAY_AUTH_MASK) { switch(startup->options&MAIL_OPT_RELAY_AUTH_MASK) {
case MAIL_OPT_RELAY_AUTH_LOGIN: case MAIL_OPT_RELAY_AUTH_LOGIN:
b64_encode(p=buf,sizeof(buf),startup->relay_pass,0); b64_encode(p=buf,sizeof(buf),startup->relay_pass,strlen(startup->relay_pass));
break; break;
default: default:
p="<unknown>"; p="<unknown>";
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment