Hi!

Here are some patches for mod_mbox to correcly display binary mime-parts.
Please review;


--- module-2.0/mod_mbox.h.orig	Tue Jan  9 15:06:24 2007
+++ module-2.0/mod_mbox.h	Tue Jan  9 15:06:01 2007
@@ -130,6 +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_bin(apr_pool_t *p, mbox_cte_e cte, char *body, apr_size_t len, apr_size_t *out_len);
 char *mbox_mime_decode_body(apr_pool_t *p, mbox_cte_e cte, char *body, apr_size_t 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,


--- module-2.0/mod_mbox_mime.c.orig	Tue Jan  9 15:02:01 2007
+++ module-2.0/mod_mbox_mime.c	Tue Jan  9 15:05:10 2007
@@ -290,7 +290,7 @@
 }
 
 /* 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_bin(apr_pool_t *p, mbox_cte_e cte, char *body, apr_size_t len, apr_size_t *out_len)
 {
     char *new_body;
 
@@ -310,9 +310,14 @@
     }
 
     new_body[len] = 0;
+    if (out_len) (*out_len) = len;
     return new_body;
 }
 
+char *mbox_mime_decode_body(apr_pool_t *p, mbox_cte_e cte, char *body, apr_size_t len)
+{
+  return mbox_mime_decode_body_bin(p, cte, body, len, NULL);
+}
 
 /* This function returns the relevant MIME part from a message. For
  * the moment, it just returns the first text/ MIME part available.


--- module-2.0/mod_mbox_out.c.orig	Tue Jan  9 15:10:13 2007
+++ module-2.0/mod_mbox_out.c	Tue Jan  9 15:09:47 2007
@@ -1029,14 +1029,15 @@
 
     if (mime_part->body_len > 0) {
         const char* pdata;
-        /* XXXX: Not binary data safe? */
+        apr_size_t out_len;
         mime_part->body[mime_part->body_len] = 0;
-        pdata = mbox_mime_decode_body(r->pool,
+        pdata = mbox_mime_decode_body_bin(r->pool,
                                       mime_part->cte,
                                       mime_part->body,
-                                      mime_part->body_len);
+                                      mime_part->body_len,
+                                      &out_len);
         if (pdata != NULL) {
-            ap_rputs(pdata, r);
+            ap_rwrite(pdata, out_len, r);
         }
     }
 


Reply via email to