diff --git a/lib/modules/MIME.pmod/module.pmod b/lib/modules/MIME.pmod/module.pmod index 300dc19190e23aaea8a6994c0177ee54cf04ecee..57171b045fcd2103120d00a2ec9aec66d0c7a505 100644 --- a/lib/modules/MIME.pmod/module.pmod +++ b/lib/modules/MIME.pmod/module.pmod @@ -3,7 +3,7 @@ // RFC1521 functionality for Pike // // Marcus Comstedt 1996-1999 -// $Id: module.pmod,v 1.8 2003/04/01 17:44:43 nilsson Exp $ +// $Id: module.pmod,v 1.9 2003/04/14 13:59:32 marcus Exp $ //! RFC1521, the @b{Multipurpose Internet Mail Extensions@} memo, defines a @@ -1073,8 +1073,15 @@ class Message { if (boundary && type=="multipart" && !body_parts && (encoded_data || decoded_data)) { array(string) parts = ("\n"+getdata())/("\n--"+boundary); - if (parts[-1][0..2]!="--\n" && parts[-1][0..3]!="--\r\n" && - parts[-1]!="--" && !guess) + if (sizeof(parts)<2) + if (guess) + parts = ({parts[0], "--"}); + else + error("boundary missing from multipart-body\n"); + string epilogue = parts[-1]; + if ((sscanf(epilogue, "--%*[ \t]%s", epilogue)<2 || + (epilogue != "" && epilogue[0] != '\n' && + epilogue[0..1] != "\r\n")) && !guess) error("multipart message improperly terminated (%O)\n", parts[-1]); encoded_data = 0; decoded_data = parts[0][1..]; @@ -1083,6 +1090,7 @@ class Message { body_parts = map(parts[1..sizeof(parts)-2], lambda(string part){ if(sizeof(part) && part[-1]=='\r') part = part[..sizeof(part)-2]; + sscanf(part, "%*[ \t]%s", part); if(has_prefix(part, "\r\n")) part = part[2..]; else if(has_prefix(part, "\n"))