]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Fix to IMAP LIST pattern matching.
authorTimo Sirainen <tss@iki.fi>
Thu, 26 Mar 2009 00:27:02 +0000 (20:27 -0400)
committerTimo Sirainen <tss@iki.fi>
Thu, 26 Mar 2009 00:27:02 +0000 (20:27 -0400)
--HG--
branch : HEAD

src/lib-imap/imap-match.c
src/tests/test-imap.c

index e1e75f4a25813985c416b109f853b0bb366d4eec..3f1a9aeca56b03bc962709dcf48bab52ccf2a060 100644 (file)
@@ -207,7 +207,13 @@ match_sub(struct imap_match_context *ctx, const char **data_p,
        data += i;
        pattern += i;
 
-        match = IMAP_MATCH_NO;
+       if (*data == '\0' && *data_p != data && data[-1] == ctx->sep &&
+           *pattern != '\0') {
+               /* data="/" pattern="/%..." */
+               match = IMAP_MATCH_CHILDREN;
+       } else {
+               match = IMAP_MATCH_NO;
+       }
        while (*pattern == '%') {
                pattern++;
 
index cf08b37add037ffdc790768fb870e5a7f5fac138..7605f100e1a1c73f9ce935226b84276f1a441be2 100644 (file)
@@ -37,7 +37,7 @@ static void test_imap_match(void)
                { "foo*bar", "foobar/baz", IMAP_MATCH_CHILDREN | IMAP_MATCH_PARENT },
                { "*foo*", "fobo", IMAP_MATCH_CHILDREN },
                { "%/%/%", "foo/", IMAP_MATCH_CHILDREN },
-               { "%/%o/%", "foo/", IMAP_MATCH_NO },
+               { "%/%o/%", "foo/", IMAP_MATCH_CHILDREN },
                { "%/%o/%", "foo", IMAP_MATCH_CHILDREN },
                { "inbox", "inbox", IMAP_MATCH_YES },
                { "inbox", "INBOX", IMAP_MATCH_NO }