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

Reply via email to