You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by je...@apache.org on 2007/07/28 23:07:48 UTC

svn commit: r560612 - in /httpd/mod_mbox/trunk/module-2.0: mod_mbox.h mod_mbox_mime.c mod_mbox_out.c

Author: jerenkrantz
Date: Sat Jul 28 14:07:47 2007
New Revision: 560612

URL: http://svn.apache.org/viewvc?view=rev&rev=560612
Log:
Fix up base64 binary decoding - such as seen with:

http://mail-archives.apache.org/mod_mbox/ws-axis-user/200704.mbox/raw/%3C460FD722.7050303@wso2.com%3E/2

* module-2.0/mod_mbox.h
  (mbox_mime_decode_body): Optionally return decomposed length.
* module-2.0/mod_mbox_mime.c
  (mbox_mime_decode_body): Optionally return decomposed length.
  (mbox_mime_get_body): Pass NULL as we're assuming text.
* module-2.0/mod_mbox_out.c
  (mbox_raw_message): Pass NULL for text/* MIME decoding; use ap_rwrite for
  potentially binary encoded attachments and such.

Modified:
    httpd/mod_mbox/trunk/module-2.0/mod_mbox.h
    httpd/mod_mbox/trunk/module-2.0/mod_mbox_mime.c
    httpd/mod_mbox/trunk/module-2.0/mod_mbox_out.c

Modified: httpd/mod_mbox/trunk/module-2.0/mod_mbox.h
URL: http://svn.apache.org/viewvc/httpd/mod_mbox/trunk/module-2.0/mod_mbox.h?view=diff&rev=560612&r1=560611&r2=560612
==============================================================================
--- httpd/mod_mbox/trunk/module-2.0/mod_mbox.h (original)
+++ httpd/mod_mbox/trunk/module-2.0/mod_mbox.h Sat Jul 28 14:07:47 2007
@@ -130,7 +130,7 @@
 mbox_mime_message_t *mbox_mime_decode_multipart(apr_pool_t *p, char *body,
 						char *ct, mbox_cte_e cte,
 						char *boundary);
-char *mbox_mime_decode_body(apr_pool_t *p, mbox_cte_e cte, char *body, apr_size_t len);
+char *mbox_mime_decode_body(apr_pool_t *p, mbox_cte_e cte, char *body, apr_size_t len, apr_size_t *ret_len);
 char *mbox_mime_get_body(apr_pool_t *p, mbox_mime_message_t *m);
 void mbox_mime_display_static_structure(request_rec *r, mbox_mime_message_t *m,
 					char *link);

Modified: httpd/mod_mbox/trunk/module-2.0/mod_mbox_mime.c
URL: http://svn.apache.org/viewvc/httpd/mod_mbox/trunk/module-2.0/mod_mbox_mime.c?view=diff&rev=560612&r1=560611&r2=560612
==============================================================================
--- httpd/mod_mbox/trunk/module-2.0/mod_mbox_mime.c (original)
+++ httpd/mod_mbox/trunk/module-2.0/mod_mbox_mime.c Sat Jul 28 14:07:47 2007
@@ -290,7 +290,8 @@
 }
 
 /* Decode a MIME part body, according to its CTE. */
-char *mbox_mime_decode_body(apr_pool_t *p, mbox_cte_e cte, char *body, apr_size_t len)
+char *mbox_mime_decode_body(apr_pool_t *p, mbox_cte_e cte, char *body,
+                            apr_size_t len, apr_size_t *ret_len)
 {
     char *new_body;
 
@@ -304,9 +305,13 @@
 
     if (cte == CTE_BASE64) {
         len = mbox_cte_decode_b64(new_body);
+        if (ret_len)
+            *ret_len = len;
     }
     else if (cte == CTE_QP) {
-	len = mbox_cte_decode_qp(new_body);
+        len = mbox_cte_decode_qp(new_body);
+        if (ret_len)
+            *ret_len = len;
     }
 
     new_body[len] = 0;
@@ -330,7 +335,7 @@
     if (strncasecmp(m->content_type, "text/", strlen("text/")) == 0) {
         char *new_body;
 
-	new_body = mbox_mime_decode_body(p, m->cte, m->body, m->body_len);
+	new_body = mbox_mime_decode_body(p, m->cte, m->body, m->body_len, NULL);
 	if (!new_body) {
 	    return MBOX_FETCH_ERROR_STR;
 	}

Modified: httpd/mod_mbox/trunk/module-2.0/mod_mbox_out.c
URL: http://svn.apache.org/viewvc/httpd/mod_mbox/trunk/module-2.0/mod_mbox_out.c?view=diff&rev=560612&r1=560611&r2=560612
==============================================================================
--- httpd/mod_mbox/trunk/module-2.0/mod_mbox_out.c (original)
+++ httpd/mod_mbox/trunk/module-2.0/mod_mbox_out.c Sat Jul 28 14:07:47 2007
@@ -981,9 +981,9 @@
         apr_size_t len = m->body_end - m->body_start;
 
         ap_set_content_type(r, "text/plain");
-	ap_rprintf(r, "%s", mbox_mime_decode_body(r->pool, m->cte,
-						  m->raw_body, len));
-	return OK;
+        ap_rprintf(r, "%s", mbox_mime_decode_body(r->pool, m->cte,
+                                                  m->raw_body, len, NULL));
+        return OK;
     }
 
     /* First, parse the MIME structure, and look for the correct
@@ -1029,14 +1029,17 @@
 
     if (mime_part->body_len > 0) {
         const char* pdata;
-        /* XXXX: Not binary data safe? */
+        apr_size_t ret_len;
+
         mime_part->body[mime_part->body_len] = 0;
+
         pdata = mbox_mime_decode_body(r->pool,
                                       mime_part->cte,
                                       mime_part->body,
-                                      mime_part->body_len);
-        if (pdata != NULL) {
-            ap_rputs(pdata, r);
+                                      mime_part->body_len,
+                                      &ret_len);
+        if (pdata != NULL && ret_len) {
+            ap_rwrite(pdata, ret_len, r);
         }
     }