MFB: Fixed buffer boundary protection

This commit is contained in:
Ilia Alshanetsky 2006-12-24 22:15:18 +00:00
parent 59b437aff8
commit 6fa038ae50

View file

@ -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 {