mirror of
https://github.com/php/php-src.git
synced 2025-08-20 09:24:05 +02:00
MFB: Fixed buffer boundary protection
This commit is contained in:
parent
59b437aff8
commit
6fa038ae50
1 changed files with 13 additions and 14 deletions
|
@ -2946,7 +2946,7 @@ PHP_FUNCTION(imap_mail_compose)
|
||||||
BODY *bod=NULL, *topbod=NULL;
|
BODY *bod=NULL, *topbod=NULL;
|
||||||
PART *mypart=NULL, *part;
|
PART *mypart=NULL, *part;
|
||||||
PARAMETER *param, *disp_param = NULL, *custom_headers_param = NULL, *tmp_param = NULL;
|
PARAMETER *param, *disp_param = NULL, *custom_headers_param = NULL, *tmp_param = NULL;
|
||||||
char tmp[8 * MAILTMPLEN], *mystring=NULL, *t=NULL, *tempstring=NULL;
|
char tmp[SENDBUFLEN + 1], *mystring=NULL, *t=NULL, *tempstring=NULL;
|
||||||
int toppart = 0;
|
int toppart = 0;
|
||||||
|
|
||||||
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &envelope, &body) == FAILURE) {
|
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &envelope, &body) == FAILURE) {
|
||||||
|
@ -3247,8 +3247,8 @@ PHP_FUNCTION(imap_mail_compose)
|
||||||
goto done;
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
rfc822_encode_body_7bit(env, topbod);
|
rfc822_encode_body_7bit(env, topbod);
|
||||||
rfc822_header (tmp, env, topbod);
|
rfc822_header(tmp, env, topbod);
|
||||||
|
|
||||||
/* add custom envelope headers */
|
/* add custom envelope headers */
|
||||||
if (custom_headers_param) {
|
if (custom_headers_param) {
|
||||||
|
@ -3297,43 +3297,42 @@ PHP_FUNCTION(imap_mail_compose)
|
||||||
/* yucky default */
|
/* yucky default */
|
||||||
if (!cookie) {
|
if (!cookie) {
|
||||||
cookie = "-";
|
cookie = "-";
|
||||||
|
} else if (strlen(cookie) > (sizeof(tmp) - 2 - 2)) { /* validate cookie length -- + CRLF */
|
||||||
|
php_error_docref(NULL TSRMLS_CC, E_WARNING, "The boudary should be no longer then 4kb");
|
||||||
|
RETVAL_FALSE;
|
||||||
|
goto done;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* for each part */
|
/* for each part */
|
||||||
do {
|
do {
|
||||||
t=tmp;
|
t=tmp;
|
||||||
/* build cookie */
|
/* build cookie */
|
||||||
sprintf (t, "--%s%s", cookie, CRLF);
|
sprintf(t, "--%s%s", cookie, CRLF);
|
||||||
|
|
||||||
/* append mini-header */
|
/* append mini-header */
|
||||||
rfc822_write_body_header(&t, &part->body);
|
rfc822_write_body_header(&t, &part->body);
|
||||||
|
|
||||||
/* write terminating blank line */
|
/* write terminating blank line */
|
||||||
strcat (t, CRLF);
|
strcat(t, CRLF);
|
||||||
|
|
||||||
/* output cookie, mini-header, and contents */
|
/* output cookie, mini-header, and contents */
|
||||||
tempstring=emalloc(strlen(mystring)+strlen(tmp)+1);
|
spprintf(&tempstring, 0, "%s%s", mystring, tmp);
|
||||||
sprintf(tempstring, "%s%s", mystring, tmp);
|
|
||||||
efree(mystring);
|
efree(mystring);
|
||||||
mystring=tempstring;
|
mystring=tempstring;
|
||||||
|
|
||||||
bod=&part->body;
|
bod=&part->body;
|
||||||
|
|
||||||
tempstring=emalloc(strlen(bod->contents.text.data)+strlen(CRLF)+strlen(mystring)+1);
|
spprintf(&tempstring, 0, "%s%s%s", mystring, bod->contents.text.data, CRLF);
|
||||||
sprintf(tempstring, "%s%s%s", mystring, bod->contents.text.data, CRLF);
|
|
||||||
efree(mystring);
|
efree(mystring);
|
||||||
mystring=tempstring;
|
mystring=tempstring;
|
||||||
} while ((part = part->next)); /* until done */
|
} while ((part = part->next)); /* until done */
|
||||||
|
|
||||||
/* output trailing cookie */
|
/* output trailing cookie */
|
||||||
sprintf(tmp, "--%s--", cookie);
|
spprintf(&tempstring, 0, "%s--%s--%s", mystring, tmp, CRLF);
|
||||||
tempstring=emalloc(strlen(tmp)+strlen(CRLF)+strlen(mystring)+1);
|
|
||||||
sprintf(tempstring, "%s%s%s", mystring, tmp, CRLF);
|
|
||||||
efree(mystring);
|
efree(mystring);
|
||||||
mystring=tempstring;
|
mystring=tempstring;
|
||||||
} else if (bod) {
|
} else if (bod) {
|
||||||
tempstring = emalloc(strlen(bod->contents.text.data)+strlen(CRLF)+strlen(mystring)+1);
|
spprintf(&tempstring, 0, "%s%s%s", mystring, bod->contents.text.data, CRLF);
|
||||||
sprintf(tempstring, "%s%s%s", mystring, bod->contents.text.data, CRLF);
|
|
||||||
efree(mystring);
|
efree(mystring);
|
||||||
mystring=tempstring;
|
mystring=tempstring;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue