--- a/src/internfile/mh_mail.cpp
+++ b/src/internfile/mh_mail.cpp
@@ -1,5 +1,5 @@
#ifndef lint
-static char rcsid[] = "@(#$Id: mh_mail.cpp,v 1.18 2006-09-19 14:30:39 dockes Exp $ (C) 2005 J.F.Dockes";
+static char rcsid[] = "@(#$Id: mh_mail.cpp,v 1.19 2006-09-22 07:19:13 dockes Exp $ (C) 2005 J.F.Dockes";
#endif
/*
* This program is free software; you can redistribute it and/or modify
@@ -47,6 +47,8 @@
using namespace std;
#endif /* NO_NAMESPACES */
+static const int maxdepth = 20;
+
MimeHandlerMail::~MimeHandlerMail()
{
if (m_vfp) {
@@ -185,6 +187,7 @@
fn.c_str()));
return MimeHandler::MHError;
}
+ LOGDEB2(("Calling processMsg with msgnum %d\n", m_msgnum));
MimeHandler::Status ret = processMsg(docout, doc, 0);
if (ret == MimeHandler::MHError)
return ret;
@@ -207,9 +210,11 @@
MimeHandlerMail::processMsg(Rcl::Doc &docout, Binc::MimePart& doc,
int depth)
{
- if (depth >= 5) {
+ LOGDEB2(("MimeHandlerMail::processMsg: depth %d\n", depth));
+ if (depth++ >= maxdepth) {
// Have to stop somewhere
- LOGDEB(("MimeHandlerMail::processMsg: stopping at depth 5\n"));
+ LOGDEB(("MimeHandlerMail::processMsg: maxdepth %d exceeded\n",
+ maxdepth));
return MimeHandler::MHDone;
}
@@ -226,7 +231,7 @@
}
if (doc.h.getFirstHeader("Date", hi)) {
rfc2047_decode(hi.getValue(), transcoded);
- if (depth == 0) {
+ if (depth == 1) {
time_t t = rfc2822DateToUxTime(transcoded);
if (t != (time_t)-1) {
char ascuxtime[100];
@@ -241,7 +246,7 @@
}
if (doc.h.getFirstHeader("Subject", hi)) {
rfc2047_decode(hi.getValue(), transcoded);
- if (depth == 0)
+ if (depth == 1)
docout.title = transcoded;
docout.text += string("Subject: ") + transcoded + string("\n");
}
@@ -265,13 +270,15 @@
// multipart can be mixed, alternative, parallel, digest.
// message/rfc822 may also be of interest.
-void MimeHandlerMail::walkmime(Rcl::Doc& docout, Binc::MimePart& doc, int depth)
+void MimeHandlerMail::walkmime(Rcl::Doc& docout, Binc::MimePart& doc,int depth)
{
+ LOGDEB2(("MimeHandlerMail::walkmime: depth %d\n", depth));
+ if (depth++ >= maxdepth) {
+ LOGINFO(("walkmime: max depth (%d) exceeded\n", maxdepth));
+ return;
+ }
+
string &out = docout.text;
- if (depth > 5) {
- LOGINFO(("walkmime: max depth (5) exceeded\n"));
- return;
- }
if (doc.isMultipart()) {
LOGDEB2(("walkmime: ismultipart %d subtype '%s'\n",
@@ -283,7 +290,7 @@
if (!stringicmp("mixed", doc.getSubType()) ||
!stringicmp("related", doc.getSubType())) {
for (it = doc.members.begin(); it != doc.members.end();it++) {
- walkmime(docout, *it, depth+1);
+ walkmime(docout, *it, depth);
}
} else if (!stringicmp("alternative", doc.getSubType())) {
std::vector<Binc::MimePart>::iterator ittxt, ithtml;
@@ -306,10 +313,10 @@
}
if (ittxt != doc.members.end()) {
LOGDEB2(("walkmime: alternative: chose text/plain part\n"))
- walkmime(docout, *ittxt, depth+1);
+ walkmime(docout, *ittxt, depth);
} else if (ithtml != doc.members.end()) {
LOGDEB2(("walkmime: alternative: chose text/html part\n"))
- walkmime(docout, *ithtml, depth+1);
+ walkmime(docout, *ithtml, depth);
}
}
return;
@@ -366,7 +373,7 @@
if (m_forPreview)
out += "]";
out += "\n\n";
- processMsg(docout, doc.members[0], depth+1);
+ processMsg(docout, doc.members[0], depth);
return;
}