Skip to content

Commit

Permalink
Fix #47983: mixed LF and CRLF line endings in mail()
Browse files Browse the repository at this point in the history
Email headers are supposed to be separated with CRLF.  Period.
  • Loading branch information
cmb69 committed Apr 2, 2020
1 parent 737f7dd commit 6983ae7
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 5 deletions.
1 change: 1 addition & 0 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ PHP NEWS
is the last char). (Islam Israfilov)
. Fixed bug #75902 (str_replace should warn when misused with nested arrays).
(Nikita)
. Fixed bug #47983 (mixed LF and CRLF line endings in mail()). (cmb)
. Made quoting of cmd execution functions consistent. (cmb)

- tidy:
Expand Down
10 changes: 5 additions & 5 deletions ext/standard/mail.c
Original file line number Diff line number Diff line change
Expand Up @@ -486,7 +486,7 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char
f = php_basename(tmp, strlen(tmp), NULL, 0);

if (headers != NULL && *headers) {
spprintf(&hdr, 0, "X-PHP-Originating-Script: " ZEND_LONG_FMT ":%s\n%s", php_getuid(), ZSTR_VAL(f), headers);
spprintf(&hdr, 0, "X-PHP-Originating-Script: " ZEND_LONG_FMT ":%s\r\n%s", php_getuid(), ZSTR_VAL(f), headers);
} else {
spprintf(&hdr, 0, "X-PHP-Originating-Script: " ZEND_LONG_FMT ":%s", php_getuid(), ZSTR_VAL(f));
}
Expand Down Expand Up @@ -559,12 +559,12 @@ PHPAPI int php_mail(char *to, char *subject, char *message, char *headers, char
MAIL_RET(0);
}
#endif
fprintf(sendmail, "To: %s\n", to);
fprintf(sendmail, "Subject: %s\n", subject);
fprintf(sendmail, "To: %s\r\n", to);
fprintf(sendmail, "Subject: %s\r\n", subject);
if (hdr != NULL) {
fprintf(sendmail, "%s\n", hdr);
fprintf(sendmail, "%s\r\n", hdr);
}
fprintf(sendmail, "\n%s\n", message);
fprintf(sendmail, "\r\n%s\r\n", message);
ret = pclose(sendmail);

#if PHP_SIGCHILD
Expand Down
17 changes: 17 additions & 0 deletions ext/standard/tests/mail/bug47983.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
--TEST--
Bug #47983 (mixed LF and CRLF line endings in mail())
--INI--
sendmail_path={MAIL:bug47983.out}
--FILE--
<?php
var_dump(mail('user@example.com', 'Test Subject', 'A Message', 'KHeaders'));
$mail = file_get_contents('bug47983.out');
var_dump(preg_match_all('/(?<!\r)\n/', $mail));
?>
--CLEAN--
<?php
unlink('bug47983.out');
?>
--EXPECT--
bool(true)
int(0)

0 comments on commit 6983ae7

Please sign in to comment.