84 lines
2.3 KiB
Plaintext
84 lines
2.3 KiB
Plaintext
Index: bogofilter/src/mime.c
|
|
===================================================================
|
|
--- bogofilter/src/mime.c (revision 7022)
|
|
+++ bogofilter/src/mime.c (revision 7023)
|
|
@@ -279,6 +279,25 @@
|
|
mime_push(parent);
|
|
}
|
|
|
|
+static bool is_final_boundary(
|
|
+ const byte *ins,
|
|
+ size_t inlen,
|
|
+ size_t blen
|
|
+)
|
|
+{
|
|
+ if (inlen >= 5
|
|
+ && inlen >= blen + 2
|
|
+ && ins[0] == '-'
|
|
+ && ins[1] == '-'
|
|
+ && ins[blen+2] == '-'
|
|
+ && ins[blen+3] == '-')
|
|
+ {
|
|
+ return true;
|
|
+ }
|
|
+ return false;
|
|
+}
|
|
+
|
|
+
|
|
/**
|
|
* Check if the line given in \a boundary is a boundary of one of the
|
|
* outer MIME containers and store the results in \a b.
|
|
@@ -301,28 +320,18 @@
|
|
(buf[blen - 1] == '\r' || buf[blen - 1] == '\n'))
|
|
blen--;
|
|
|
|
- /* skip initial -- */
|
|
- buf += 2;
|
|
- blen -= 2;
|
|
-
|
|
- /* skip and note ending --, if any */
|
|
- if (blen > 2 && buf[blen - 1] == '-' && buf[blen - 2] == '-') {
|
|
- b->is_final = true;
|
|
- blen -= 2;
|
|
- } else {
|
|
- b->is_final = false;
|
|
- }
|
|
-
|
|
/* search stack for matching boundary, in reverse order */
|
|
for (ptr = mime_stack_bot; ptr != NULL; ptr = ptr->parent)
|
|
{
|
|
if (is_mime_container(ptr)
|
|
&& ptr->boundary != NULL
|
|
- && ptr->boundary_len == blen
|
|
- && (memcmp(ptr->boundary, buf, blen) == 0))
|
|
+ && (ptr->boundary_len + 2 == blen
|
|
+ || ptr->boundary_len + 4 == blen)
|
|
+ && (memcmp(ptr->boundary, buf + 2, ptr->boundary_len) == 0))
|
|
{
|
|
b->depth = ptr->depth;
|
|
b->is_valid = true;
|
|
+ b->is_final = is_final_boundary(buf, blen, ptr->boundary_len);
|
|
break;
|
|
}
|
|
}
|
|
Index: bogofilter/NEWS
|
|
===================================================================
|
|
--- bogofilter/NEWS (revision 7022)
|
|
+++ bogofilter/NEWS (revision 7023)
|
|
@@ -15,6 +15,15 @@
|
|
|
|
-------------------------------------------------------------------------------
|
|
|
|
+ 2015-02-25
|
|
+
|
|
+ * Fix the lexer to handle MIME multipart messages properly when the
|
|
+ boundary ended in "--". The parser would previously never find the
|
|
+ MIME parts because it mistook all boundaries ending in two dashes to
|
|
+ be the final boundary of the multipart, rather than checking if the
|
|
+ two dashes were extra.
|
|
+ Reported by Matt Garretson to the bogofilter mailing list today.
|
|
+
|
|
2014-07-10
|
|
|
|
* Take patch from Julius Plenz to fix a bug in the charset converter
|