cvs: php4 /ext/standard mail.c
| From: | Ilia Alshanetsky | Date: | Mon, 24 Feb 2003 19:41:18 +0000 |
| Subject: | cvs: php4 /ext/standard mail.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-19146@lists.php.net to get a copy of this message | ||
iliaa Mon Feb 24 14:41:18 2003 EDT
Modified files:
/php4/ext/standard mail.c
Log:
Fixed bug #22355 (PHP would remove folding from Subject & To fields).
Index: php4/ext/standard/mail.c
diff -u php4/ext/standard/mail.c:1.68 php4/ext/standard/mail.c:1.69
--- php4/ext/standard/mail.c:1.68 Tue Dec 31 11:07:46 2002
+++ php4/ext/standard/mail.c Mon Feb 24 14:41:18 2003
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mail.c,v 1.68 2002/12/31 16:07:46 sebastian Exp $ */
+/* $Id: mail.c,v 1.69 2003/02/24 19:41:18 iliaa Exp $ */
#include <stdlib.h>
#include <ctype.h>
@@ -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 @@
}
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 @@
}
for(i = 0; subject[i]; i++) {
if (iscntrl((unsigned char) subject[i])) {
+ SKIP_LONG_HEADER_SEP(subject, i);
subject[i] = ' ';
}
}