Finally fixed: http://hg.dovecot.org/dovecot-2.2/rev/0e1a3c909a13

On 06 Aug 2014, at 18:56, gowen (dovecot) <[email protected]> wrote:

> 
> # 2.2.12: /etc/dovecot/dovecot.conf
> # OS: Linux 3.15.4-x86_64-linode45 x86_64 openSUSE 12.3 (x86_64)
> 
> Short version:
> 
> 1) I filter out spam by using a dovecot sieve filter to act based on a header 
> inserted by bogofilter
> 2) In some cases, sieve fails to correctly file based on this header
> 3) Testing with sieve-test indicates that it's testing the wrong header
> 4) Suggestions?  Am I doing something wrong?  Is there a problem with these 
> headers that bends test-sieve out of shape?
> 5) Test files from below are also available via 
> http://www.swynwyr.com/sieve-test/
> 
> Any help is appreciated!!!
> 
> 
> Long version with full details:
> 
> Here is the simple sieve filter I'm using to test, and two different variants 
> of an email which triggers this problem.  I basically deleted things one by 
> one from an original email (1) to get minimal testcases that triggered (2) or 
> did not trigger (3) the problem.
> 
> The filter:
> 
> === begin test.sieve ===
> require ["fileinto", "body", "regex"];
> 
> if header :contains "X-Bogosity" "Spam," {
>    fileinto "SPAM.SPAM";
>    stop;
> } elsif header :contains "X-Bogosity" "Unsure," {
>    fileinto "SPAM.UNSURE";
>    stop;
> }
> 
> keep;
> stop;
> === end test.sieve ===
> 
> Here is an example email that will cause this filter to not function as 
> expected:
> 
> === begin message.2 ===
> Return-Path: <[email protected]>
> Subject:   =?utf-8?B?QUhTIEtpdGNoZW4gTWFrZW92ZXIgR2l2ZWF3YXkg?=
> Subject:                                          ÎHS KitÑhen Îakеovеr 
> Givеaway
> Subject:      =?ISO-8859-1?Q?AHS Kitchen Makeover Giveaway =A0=A0=A0?=
> Subject:
> Subject:                AHS Kitchen Makeover Giveaway
> X-Bogosity: Spam, tests=bogofilter, spamicity=1.000000, version=1.2.3
> 
> 
> Home Warranty Summer Giveaway
> === end message.2 ===
> 
> If I run test-sieve on this, we can clearly see in the trace log that when 
> it's supposed to test for header "X-Bogosity" it in fact looks at one of the 
> multiple "Subject" headers.  Note that the result is storing in INBOX rather 
> than SPAM.SPAM, and that the "matching value" for "X-Bogosity headers" is 
> actually the contents of the final "Subject" header in the test on line 3.  
> In the second test, on line 6, it uses a different and correct value for the 
> same header!  But too late to help as the first test was the one it should 
> have had a match on.
> 
> === begin session ===
> $ sieve-test -t trace2.log -Tlevel=matching test.sieve message.2
> 
> Performed actions:
> 
> * store message in folder: INBOX
> 
> Implicit keep:
> 
>  (none)
> 
> sieve-test(gowen): Info: final result: success
> $ cat trace2.log
> 
>      ## Started executing script 'test'
>   3: header test
>   3:   starting `:contains' match with `i;ascii-casemap' comparator:
>   3:   extracting `X-Bogosity' headers from message
>   3:   matching value `AHS Kitchen Makeover Giveaway'
>   3:     with key `Spam,' => 0
>   3:   finishing match with result: not matched
>   3: jump if result is false
>   3:   jumping to line 6
>   6: header test
>   6:   starting `:contains' match with `i;ascii-casemap' comparator:
>   6:   extracting `X-Bogosity' headers from message
>   6:   matching value `Spam, tests=bogofilter, spamicity=1.000000, 
> version=1.2.3'
>   6:     with key `Unsure,' => 0
>   6:   finishing match with result: not matched
>   6: jump if result is false
>   6:   jumping to line 11
>  11: keep action; store message in default mailbox
>  12: stop command; end all script execution
>      ## Finished executing script 'test'
> 
> $
> === end session ===
> 
> Now lets remove the "Return-Path" from that message.  (Of the original 26 
> headers, all but the 7 shown in message.2 could be removed and still have 
> this message break the filter).  This alters thing enough that sieve starts 
> working as expected (in fact, removing any one of the 6 non-X-Bogosity 
> headers will cause this to start working).
> 
> === begin message.3 ===
> Subject:   =?utf-8?B?QUhTIEtpdGNoZW4gTWFrZW92ZXIgR2l2ZWF3YXkg?=
> Subject:                                          ÎHS KitÑhen Îakеovеr 
> Givеaway
> Subject:      =?ISO-8859-1?Q?AHS Kitchen Makeover Giveaway =A0=A0=A0?=
> Subject:
> Subject:                AHS Kitchen Makeover Giveaway
> X-Bogosity: Spam, tests=bogofilter, spamicity=1.000000, version=1.2.3
> 
> 
> Home Warranty Summer Giveaway
> === end message.3 ===
> 
> Now when we run test-sieve it works as expected, filing into SPAM.SPAM and 
> showing the correct matching value for line 3:
> 
> === begin session ===
> $ sieve-test -t trace3.log -Tlevel=matching test.sieve message.3
> 
> Performed actions:
> 
> * store message in folder: SPAM.SPAM
> 
> Implicit keep:
> 
>  (none)
> 
> sieve-test(gowen): Info: final result: success
> $ cat trace3.log
> 
>      ## Started executing script 'test'
>   3: header test
>   3:   starting `:contains' match with `i;ascii-casemap' comparator:
>   3:   extracting `X-Bogosity' headers from message
>   3:   matching value `Spam, tests=bogofilter, spamicity=1.000000, 
> version=1.2.3'
>   3:     with key `Spam,' => 1
>   3:   finishing match with result: matched
>   3: jump if result is false
>   3:   not jumping
>   4: fileinto action
>   4:   store message in mailbox `SPAM.SPAM'
>   5: stop command; end all script execution
>      ## Finished executing script 'test'
> 
> $
> === end session ===

Reply via email to