From: Ilia Alshanetsky Date: Mon, 24 Feb 2003 19:41:18 +0000 (+0000) Subject: Fixed bug #22355 (PHP would remove folding from Subject & To fields). X-Git-Tag: RELEASE_0_5~778 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4474f9225a599d3f4cd3674e777d40a531d3c63b;p=php Fixed bug #22355 (PHP would remove folding from Subject & To fields). --- diff --git a/ext/standard/mail.c b/ext/standard/mail.c index b340578993..3dd51cb3df 100644 --- a/ext/standard/mail.c +++ b/ext/standard/mail.c @@ -46,6 +46,15 @@ #include "netware/sysexits.h" /* For exit status codes like EX_OK */ #endif +#define SKIP_LONG_HEADER_SEP(str, pos) \ + if (str[pos] == '\r' && str[pos + 1] == '\n' && (str[pos + 2] == ' ' || str[pos + 2] == '\t')) { \ + pos += 3; \ + while (str[pos] == ' ' || str[pos] == '\t') { \ + pos++; \ + } \ + continue; \ + } \ + /* {{{ proto int ezmlm_hash(string addr) Calculate EZMLM list hash value. */ PHP_FUNCTION(ezmlm_hash) @@ -102,6 +111,12 @@ PHP_FUNCTION(mail) } for (i = 0; to[i]; i++) { if (iscntrl((unsigned char) to[i])) { + /* According to RFC 822, section 3.1.1 long headers may be separated into + * parts using CRLF followed at least one linear-white-space character ('\t' or ' '). + * To prevent these separators from being replaced with a space, we use the + * SKIP_LONG_HEADER_SEP to skip over them. + */ + SKIP_LONG_HEADER_SEP(to, i); to[i] = ' '; } } @@ -116,6 +131,7 @@ PHP_FUNCTION(mail) } for(i = 0; subject[i]; i++) { if (iscntrl((unsigned char) subject[i])) { + SKIP_LONG_HEADER_SEP(subject, i); subject[i] = ' '; } }