Commit c727f4d6c5f for php.net
commit c727f4d6c5f258a69db04fc6f7d21e034afdc412
Author: Gina Peter Banyard <girgias@php.net>
Date: Wed Dec 24 18:08:32 2025 +0100
ext/standard/mail: use zend_string* for extra_cmd param of php_mail()
diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS
index 9b30458392a..22b9e6f660c 100644
--- a/UPGRADING.INTERNALS
+++ b/UPGRADING.INTERNALS
@@ -74,6 +74,7 @@ PHP 8.6 INTERNALS UPGRADE NOTES
. _php_error_log() now has a formal return type of zend_result.
. _php_error_log() now accepts zend_string* values instead of char*.
. _php_error_log_ex() has been removed.
+ . php_mail()'s extra_cmd parameter is now a zend_string*.
========================
4. OpCode changes
diff --git a/ext/mbstring/mbstring.c b/ext/mbstring/mbstring.c
index 12c366c33d5..c5331ef017a 100644
--- a/ext/mbstring/mbstring.c
+++ b/ext/mbstring/mbstring.c
@@ -4703,7 +4703,7 @@ PHP_FUNCTION(mb_send_mail)
extra_cmd = php_escape_shell_cmd(extra_cmd);
}
- RETVAL_BOOL(php_mail(to_r, ZSTR_VAL(subject), message, ZSTR_VAL(str_headers), extra_cmd ? ZSTR_VAL(extra_cmd) : NULL));
+ RETVAL_BOOL(php_mail(to_r, ZSTR_VAL(subject), message, ZSTR_VAL(str_headers), extra_cmd));
if (extra_cmd) {
zend_string_release_ex(extra_cmd, 0);
diff --git a/ext/standard/mail.c b/ext/standard/mail.c
index 01e1148af08..395c7bb81d4 100644
--- a/ext/standard/mail.c
+++ b/ext/standard/mail.c
@@ -343,7 +343,7 @@ PHP_FUNCTION(mail)
extra_cmd = php_escape_shell_cmd(extra_cmd);
}
- if (php_mail(to_r, subject_r, message, headers_str && ZSTR_LEN(headers_str) ? ZSTR_VAL(headers_str) : NULL, extra_cmd ? ZSTR_VAL(extra_cmd) : NULL)) {
+ if (php_mail(to_r, subject_r, message, headers_str && ZSTR_LEN(headers_str) ? ZSTR_VAL(headers_str) : NULL, extra_cmd)) {
RETVAL_TRUE;
} else {
RETVAL_FALSE;
@@ -434,7 +434,7 @@ static int php_mail_detect_multiple_crlf(const char *hdr) {
/* {{{ php_mail */
-PHPAPI bool php_mail(const char *to, const char *subject, const char *message, const char *headers, const char *extra_cmd)
+PHPAPI bool php_mail(const char *to, const char *subject, const char *message, const char *headers, const zend_string *extra_cmd)
{
FILE *sendmail;
char *sendmail_path = INI_STR("sendmail_path");
@@ -551,7 +551,7 @@ PHPAPI bool php_mail(const char *to, const char *subject, const char *message, c
#endif
}
if (extra_cmd != NULL) {
- spprintf(&sendmail_cmd, 0, "%s %s", sendmail_path, extra_cmd);
+ spprintf(&sendmail_cmd, 0, "%s %s", sendmail_path, ZSTR_VAL(extra_cmd));
} else {
sendmail_cmd = sendmail_path;
}
diff --git a/ext/standard/php_mail.h b/ext/standard/php_mail.h
index 731b70c0e10..bebb526699d 100644
--- a/ext/standard/php_mail.h
+++ b/ext/standard/php_mail.h
@@ -20,6 +20,6 @@
PHP_MINFO_FUNCTION(mail);
PHPAPI zend_string *php_mail_build_headers(const HashTable *headers);
-PHPAPI extern bool php_mail(const char *to, const char *subject, const char *message, const char *headers, const char *extra_cmd);
+PHPAPI extern bool php_mail(const char *to, const char *subject, const char *message, const char *headers, const zend_string *extra_cmd);
#endif /* PHP_MAIL_H */