iliaa Fri Feb 16 03:32:07 2007 UTC
Modified files: (Branch: PHP_5_2)
/php-src/ext/imap php_imap.c
Log:
Reduce stack usage & improve boundary checks
http://cvs.php.net/viewvc.cgi/php-src/ext/imap/php_imap.c?r1=1.208.2.7.2.17&r2=1.208.2.7.2.18&diff_format=u
Index: php-src/ext/imap/php_imap.c
diff -u php-src/ext/imap/php_imap.c:1.208.2.7.2.17
php-src/ext/imap/php_imap.c:1.208.2.7.2.18
--- php-src/ext/imap/php_imap.c:1.208.2.7.2.17 Tue Feb 13 20:12:52 2007
+++ php-src/ext/imap/php_imap.c Fri Feb 16 03:32:06 2007
@@ -26,7 +26,7 @@
| PHP 4.0 updates: Zeev Suraski <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: php_imap.c,v 1.208.2.7.2.17 2007/02/13 20:12:52 iliaa Exp $ */
+/* $Id: php_imap.c,v 1.208.2.7.2.18 2007/02/16 03:32:06 iliaa Exp $ */
#define IMAP41
@@ -2956,7 +2956,7 @@
BODY *bod=NULL, *topbod=NULL;
PART *mypart=NULL, *part;
PARAMETER *param, *disp_param = NULL, *custom_headers_param = NULL,
*tmp_param = NULL;
- char tmp[SENDBUFLEN + 1], *mystring=NULL, *t=NULL, *tempstring=NULL;
+ char *tmp=NULL, *mystring=NULL, *t=NULL, *tempstring=NULL;
int toppart = 0;
if (ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &envelope, &body)
== FAILURE) {
@@ -3258,6 +3258,9 @@
}
rfc822_encode_body_7bit(env, topbod);
+
+ tmp = emalloc(SENDBUFLEN + 1);
+
rfc822_header(tmp, env, topbod);
/* add custom envelope headers */
@@ -3307,7 +3310,7 @@
/* yucky default */
if (!cookie) {
cookie = "-";
- } else if (strlen(cookie) > (sizeof(tmp) - 2 - 2)) {
/* validate cookie length -- + CRLF */
+ } else if (strlen(cookie) > (SENDBUFLEN - 2 - 2 - 2)) {
/* validate cookie length -- + CRLF * 2 */
php_error_docref(NULL TSRMLS_CC, E_WARNING,
"The boudary should be no longer then 4kb");
RETVAL_FALSE;
goto done;
@@ -3315,18 +3318,14 @@
/* for each part */
do {
- t=tmp;
- /* build cookie */
- sprintf(t, "--%s%s", cookie, CRLF);
-
+ t = tmp;
+
/* append mini-header */
+ *t = '\0';
rfc822_write_body_header(&t, &part->body);
- /* write terminating blank line */
- strcat(t, CRLF);
-
/* output cookie, mini-header, and contents */
- spprintf(&tempstring, 0, "%s%s", mystring, tmp);
+ spprintf(&tempstring, 0, "%s--%s%s%s%s",
mystring, cookie, CRLF, tmp, CRLF);
efree(mystring);
mystring=tempstring;
@@ -3342,9 +3341,9 @@
efree(mystring);
mystring=tempstring;
} else if (bod) {
- spprintf(&tempstring, 0, "%s%s%s", mystring,
bod->contents.text.data, CRLF);
- efree(mystring);
- mystring=tempstring;
+ spprintf(&tempstring, 0, "%s%s%s", mystring,
bod->contents.text.data, CRLF);
+ efree(mystring);
+ mystring=tempstring;
} else {
efree(mystring);
RETVAL_FALSE;
@@ -3353,6 +3352,9 @@
RETVAL_STRING(tempstring, 0);
done:
+ if (tmp) {
+ efree(tmp);
+ }
mail_free_body(&topbod);
mail_free_envelope(&env);
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php