[php-src] master: Fix Windows mail handling regressions (#23060)

Shivam Mathur via GitHub <[email protected]>
Newsgroups gmane.comp.php.cvs.general
Message-ID <[email protected]>
Author: Shivam Mathur (shivammathur)
Committer: GitHub (web-flow)
Pusher: shivammathur
Date: 2026-08-05T16:04:33+05:30

Commit: https://github.com/php/php-src/commit/cb01a8b1cfa5adb25e0ba2fd193353f7a4686b32
Raw diff: https://github.com/php/php-src/commit/cb01a8b1cfa5adb25e0ba2fd193353f7a4686b32.diff

Fix Windows mail handling regressions (#23060)

Changed paths:
  M  ext/standard/mail.c
  M  win32/sendmail.c


Diff:

diff --git a/ext/standard/mail.c b/ext/standard/mail.c
index 6aac0d364cf0..6d85d06d1f6d 100644
--- a/ext/standard/mail.c
+++ b/ext/standard/mail.c
@@ -528,7 +528,7 @@ PHPAPI bool php_mail(const char *to, const char *subject, const char *message, c
 		MAIL_RET(false);
 	}
 
-	if (!sendmail_path) {
+	if (!(sendmail_path && sendmail_path[0] != '\0')) {
 #ifdef PHP_WIN32
 		int tsm_err;
 		char *tsm_errmsg = NULL;
@@ -702,7 +702,7 @@ PHP_MINFO_FUNCTION(mail)
 	const char *sendmail_path = zend_ini_string_literal("sendmail_path");
 
 #ifdef PHP_WIN32
-	if (!sendmail_path) {
+	if (!(sendmail_path && sendmail_path[0] != '\0')) {
 		php_info_print_table_row(2, "Internal Sendmail Support for Windows", "enabled");
 	} else {
 		php_info_print_table_row(2, "Path to sendmail", sendmail_path);
diff --git a/win32/sendmail.c b/win32/sendmail.c
index 0160838054d8..cd44e87fc797 100644
--- a/win32/sendmail.c
+++ b/win32/sendmail.c
@@ -216,8 +216,9 @@ PHPAPI int TSendMail(const char *host, int *error, char **error_message,
 	}
 
 	/* Fall back to sendmail_from php.ini setting */
-	if (zend_ini_string_literal("sendmail_from")) {
-		RPath = estrdup(zend_ini_string_literal("sendmail_from"));
+	const char *sendmail_from = zend_ini_string_literal("sendmail_from");
+	if (sendmail_from && sendmail_from[0] != '\0') {
+		RPath = estrdup(sendmail_from);
 	} else if (headers_lc) {
 		int found = 0;
 		const char *lookup = ZSTR_VAL(headers_lc);
@@ -505,14 +506,6 @@ static int SendText(char *RPath, const char *Subject, const char *mailTo, const
 		efree(tempMailTo);
 	}
 
-	if (!Post("DATA\r\n")) {
-		return (FAILED_TO_SEND);
-	}
-	if ((res = Ack(&server_response)) != SUCCESS) {
-		SMTP_ERROR_RESPONSE(server_response);
-		return (res);
-	}
-
 	/* Send mail to all Bcc rcpt's
 	   This is basically a rip of the Cc code above.
 	   Just don't forget to remove the Bcc: from the header afterwards. */
@@ -579,8 +572,7 @@ static int SendText(char *RPath, const char *Subject, const char *mailTo, const
 				   which would look like "\r\n\r\n". */
 				stripped_header = zend_string_concat2(ZSTR_VAL(headers), header_length_prior_to_bcc, pos2 + 2, strlen(pos2) - 2);
 			} else {
-				stripped_header = zend_string_truncate(headers, header_length_prior_to_bcc, false);
-				ZSTR_VAL(stripped_header)[ZSTR_LEN(stripped_header)] = '\0';
+				stripped_header = zend_string_init(ZSTR_VAL(headers), header_length_prior_to_bcc, false);
 			}
 		} else {
 			/* Simplify the code that we create a copy of stripped_header no matter if
@@ -589,6 +581,14 @@ static int SendText(char *RPath, const char *Subject, const char *mailTo, const
 		}
 	}
 
+	if (!Post("DATA\r\n")) {
+		return (FAILED_TO_SEND);
+	}
+	if ((res = Ack(&server_response)) != SUCCESS) {
+		SMTP_ERROR_RESPONSE(server_response);
+		return (res);
+	}
+
 	/* send message header */
 	bool PostHeaderIsSuccessful = false;
 	if (Subject == NULL) {
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.