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);
}
}