diff options
Diffstat (limited to 'ext/standard/mail.c')
| -rw-r--r-- | ext/standard/mail.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/ext/standard/mail.c b/ext/standard/mail.c index 0977a284ea..40c01a650e 100644 --- a/ext/standard/mail.c +++ b/ext/standard/mail.c @@ -101,14 +101,15 @@ PHP_FUNCTION(ezmlm_hash) PHP_FUNCTION(mail) { char *to=NULL, *message=NULL, *headers=NULL, *headers_trimmed=NULL; - char *subject=NULL, *extra_cmd=NULL; + char *subject=NULL; + zend_string *extra_cmd=NULL; int to_len, message_len, headers_len = 0; - int subject_len, extra_cmd_len = 0, i; + int subject_len, i; char *force_extra_parameters = INI_STR("mail.force_extra_parameters"); char *to_r, *subject_r; char *p, *e; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss|ss", &to, &to_len, &subject, &subject_len, &message, &message_len, &headers, &headers_len, &extra_cmd, &extra_cmd_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sss|sS", &to, &to_len, &subject, &subject_len, &message, &message_len, &headers, &headers_len, &extra_cmd) == FAILURE) { return; } @@ -121,7 +122,7 @@ PHP_FUNCTION(mail) headers_trimmed = php_trim(headers, headers_len, NULL, 0, NULL, 2 TSRMLS_CC); } if (extra_cmd) { - MAIL_ASCIIZ_CHECK(extra_cmd, extra_cmd_len); + MAIL_ASCIIZ_CHECK(extra_cmd->val, extra_cmd->len); } if (to_len > 0) { @@ -167,10 +168,10 @@ PHP_FUNCTION(mail) if (force_extra_parameters) { extra_cmd = php_escape_shell_cmd(force_extra_parameters); } else if (extra_cmd) { - extra_cmd = php_escape_shell_cmd(extra_cmd); + extra_cmd = php_escape_shell_cmd(extra_cmd->val); } - if (php_mail(to_r, subject_r, message, headers_trimmed, extra_cmd TSRMLS_CC)) { + if (php_mail(to_r, subject_r, message, headers_trimmed, extra_cmd ? extra_cmd->val : NULL TSRMLS_CC)) { RETVAL_TRUE; } else { RETVAL_FALSE; @@ -181,7 +182,7 @@ PHP_FUNCTION(mail) } if (extra_cmd) { - efree (extra_cmd); + STR_RELEASE(extra_cmd); } if (to_r != to) { efree(to_r); |
