Skip to content

Commit 1c8377f

Browse files
committed
win32/sendmail.c/PostHeader: refactor function
Input as zend_string Use smart_str to concatenate strings Change return type to bool
1 parent c216669 commit 1c8377f

File tree

1 file changed

+34
-47
lines changed

1 file changed

+34
-47
lines changed

win32/sendmail.c

Lines changed: 34 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ static const char *ErrorMessages[] =
115115
static int SendText(char *RPath, const char *Subject, const char *mailTo, const char *data,
116116
zend_string *headers, zend_string *headers_lc, char **error_message);
117117
static int MailConnect();
118-
static int PostHeader(char *RPath, const char *Subject, const char *mailTo, char *xheaders);
118+
static bool PostHeader(char *RPath, const char *Subject, const char *mailTo, zend_string *xheaders);
119119
static bool Post(LPCSTR msg);
120120
static int Ack(char **server_response);
121121
static unsigned long GetAddr(LPSTR szHost);
@@ -589,16 +589,17 @@ static int SendText(char *RPath, const char *Subject, const char *mailTo, const
589589
}
590590

591591
/* send message header */
592+
bool PostHeaderIsSuccessful = false;
592593
if (Subject == NULL) {
593-
res = PostHeader(RPath, "No Subject", mailTo, stripped_header ? ZSTR_VAL(stripped_header) : NULL);
594+
PostHeaderIsSuccessful = PostHeader(RPath, "No Subject", mailTo, stripped_header);
594595
} else {
595-
res = PostHeader(RPath, Subject, mailTo, stripped_header ? ZSTR_VAL(stripped_header) : NULL);
596+
PostHeaderIsSuccessful = PostHeader(RPath, Subject, mailTo, stripped_header);
596597
}
597598
if (stripped_header) {
598599
zend_string_release_ex(stripped_header, false);
599600
}
600-
if (res != SUCCESS) {
601-
return (res);
601+
if (!PostHeaderIsSuccessful) {
602+
return FAILED_TO_SEND;
602603
}
603604

604605
/* Escape \n. sequences
@@ -645,14 +646,6 @@ static int SendText(char *RPath, const char *Subject, const char *mailTo, const
645646
return (SUCCESS);
646647
}
647648

648-
static void addToHeader(char **header_buffer, const char *specifier, const char *string)
649-
{
650-
size_t header_buffer_size = strlen(*header_buffer);
651-
size_t total_size = header_buffer_size + strlen(specifier) + strlen(string) + 1;
652-
*header_buffer = erealloc(*header_buffer, total_size);
653-
snprintf(*header_buffer + header_buffer_size, total_size - header_buffer_size, specifier, string);
654-
}
655-
656649
//*********************************************************************
657650
// Name: PostHeader
658651
// Input: 1) return path
@@ -664,64 +657,58 @@ static void addToHeader(char **header_buffer, const char *specifier, const char
664657
// Author/Date: jcar 20/9/96
665658
// History:
666659
//*********************************************************************
667-
static int PostHeader(char *RPath, const char *Subject, const char *mailTo, char *xheaders)
660+
static bool PostHeader(char *RPath, const char *Subject, const char *mailTo, zend_string *xheaders)
668661
{
669662
/* Print message header according to RFC 822 */
670663
/* Return-path, Received, Date, From, Subject, Sender, To, cc */
671664

672-
int res;
673-
char *header_buffer;
674-
char *headers_lc = NULL;
675-
size_t i;
665+
zend_string *headers_lc = NULL;
666+
smart_str combined_headers = {0};
676667

677668
if (xheaders) {
678-
size_t headers_lc_len;
679-
680-
headers_lc = estrdup(xheaders);
681-
headers_lc_len = strlen(headers_lc);
682-
683-
for (i = 0; i < headers_lc_len; i++) {
684-
headers_lc[i] = tolower(headers_lc[i]);
685-
}
669+
headers_lc = zend_string_tolower(xheaders);
686670
}
687671

688-
header_buffer = ecalloc(1, MAIL_BUFFER_SIZE);
689-
690-
if (!xheaders || !strstr(headers_lc, "date:")) {
672+
if (!xheaders || !strstr(ZSTR_VAL(headers_lc), "date:")) {
691673
time_t tNow = time(NULL);
692674
zend_string *dt = php_format_date("r", 1, tNow, 1);
693675

694-
snprintf(header_buffer, MAIL_BUFFER_SIZE, "Date: %s\r\n", ZSTR_VAL(dt));
676+
zend_string_appends(&combined_headers, "Date: ");
677+
zend_string_append(&combined_headers, dt);
678+
zend_string_appends(&combined_headers, "\r\n");
695679
zend_string_free(dt);
696680
}
697681

698-
if (!headers_lc || !strstr(headers_lc, "from:")) {
699-
addToHeader(&header_buffer, "From: %s\r\n", RPath);
682+
if (!headers_lc || !strstr(ZSTR_VAL(headers_lc), "from:")) {
683+
zend_string_appends(&combined_headers, "From: ");
684+
zend_string_appends(&combined_headers, RPath);
685+
zend_string_appends(&combined_headers, "\r\n");
700686
}
701-
addToHeader(&header_buffer, "Subject: %s\r\n", Subject);
687+
zend_string_appends(&combined_headers, "Subject: ");
688+
zend_string_appends(&combined_headers, Subject);
689+
zend_string_appends(&combined_headers, "\r\n");
702690

703691
/* Only add the To: field from the $to parameter if isn't in the custom headers */
704-
if ((headers_lc && (!strstr(headers_lc, "\r\nto:") && (strncmp(headers_lc, "to:", 3) != 0))) || !headers_lc) {
705-
addToHeader(&header_buffer, "To: %s\r\n", mailTo);
692+
if (!headers_lc || (!strstr(ZSTR_VAL(headers_lc), "\r\nto:") && (strncmp(ZSTR_VAL(headers_lc), "to:", 3) != 0))) {
693+
zend_string_appends(&combined_headers, "To: ");
694+
zend_string_appends(&combined_headers, mailTo);
695+
zend_string_appends(&combined_headers, "\r\n");
706696
}
707697
if (xheaders) {
708-
addToHeader(&header_buffer, "%s\r\n", xheaders);
698+
zend_string_append(&combined_headers, xheaders);
699+
zend_string_appends(&combined_headers, "\r\n");
709700
}
701+
/* End of headers */
702+
zend_string_appends(&combined_headers, "\r\n");
703+
zend_string *combined_headers_str = smart_str_extract(combined_headers);
710704

711705
if (headers_lc) {
712-
efree(headers_lc);
713-
}
714-
if (!Post(header_buffer)) {
715-
efree(header_buffer);
716-
return (FAILED_TO_SEND);
706+
zend_string_release_ex(headers_lc, false);
717707
}
718-
efree(header_buffer);
719708

720-
if (!Post("\r\n")) {
721-
return (FAILED_TO_SEND);
722-
}
723-
724-
return (SUCCESS);
709+
bool header_post_status = Post(ZSTR_VAL(combined_headers_str));
710+
zend_string_release_ex(combined_headers_str, false);
711+
return header_post_status;
725712
}
726713

727714

0 commit comments

Comments
 (0)