From c86759641df76c81c3c2273f2dcf71a656d61033 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Wed, 5 Nov 2008 16:26:41 +0000 Subject: [PATCH] /* If the last item in a list of recipients was truncated to a partial address, * remove it completely in order to avoid choking libSieve --- citadel/modules/sieve/serv_sieve.c | 2 +- citadel/msgbase.c | 34 ++++++++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/citadel/modules/sieve/serv_sieve.c b/citadel/modules/sieve/serv_sieve.c index c86c1b0ba..473a8dcf9 100644 --- a/citadel/modules/sieve/serv_sieve.c +++ b/citadel/modules/sieve/serv_sieve.c @@ -640,7 +640,7 @@ void sieve_do_msg(long msgnum, void *userdata) { } - CtdlLogPrintf(CTDL_DEBUG, "HEADERS-------\n%s\n", my.rfc822headers); + CtdlLogPrintf(CTDL_DEBUG, "HEADERS-------\n%s\n", my.rfc822headers); sieve2_setvalue_string(sieve2_context, "allheaders", my.rfc822headers); diff --git a/citadel/msgbase.c b/citadel/msgbase.c index 819913f47..ac0c33161 100644 --- a/citadel/msgbase.c +++ b/citadel/msgbase.c @@ -1593,6 +1593,31 @@ char *qp_encode_email_addrs(char *source) } +/* If the last item in a list of recipients was truncated to a partial address, + * remove it completely in order to avoid choking libSieve + */ +void sanitize_truncated_recipient(char *str) +{ + if (!str) return; + if (num_tokens(str, ',') < 2) return; + + int len = strlen(str); + if (len < 900) return; + if (len > 998) str[998] = 0; + + char *cptr = strrchr(str, ','); + if (!cptr) return; + + char *lptr = strchr(cptr, '<'); + char *rptr = strchr(cptr, '>'); + + if ( (lptr) && (rptr) && (rptr > lptr) ) return; + + *cptr = 0; +} + + + /* * Get a message off disk. (returns om_* values found in msgbase.h) */ @@ -1792,8 +1817,10 @@ int CtdlOutputPreLoadedMsg( safestrncpy(suser, mptr, sizeof suser); } else if (i == 'Y') { - if ((flags & QP_EADDR) != 0) + if ((flags & QP_EADDR) != 0) { mptr = qp_encode_email_addrs(mptr); + } + sanitize_truncated_recipient(mptr); cprintf("CC: %s%s", mptr, nl); } else if (i == 'P') { @@ -1824,13 +1851,16 @@ int CtdlOutputPreLoadedMsg( { if (haschar(mptr, '@') == 0) { + sanitize_truncated_recipient(mptr); cprintf("To: %s@%s", mptr, config.c_fqdn); cprintf("%s", nl); } else { - if ((flags & QP_EADDR) != 0) + if ((flags & QP_EADDR) != 0) { mptr = qp_encode_email_addrs(mptr); + } + sanitize_truncated_recipient(mptr); cprintf("To: %s", mptr); cprintf("%s", nl); } -- 2.30.2