From: Timo Sirainen Date: Thu, 26 Mar 2009 00:27:02 +0000 (-0400) Subject: Fix to IMAP LIST pattern matching. X-Git-Tag: 1.2.rc1~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a5db9d87b2fbbc67069a7c3caf6500dfd1914b82;p=thirdparty%2Fdovecot%2Fcore.git Fix to IMAP LIST pattern matching. --HG-- branch : HEAD --- diff --git a/src/lib-imap/imap-match.c b/src/lib-imap/imap-match.c index e1e75f4a25..3f1a9aeca5 100644 --- a/src/lib-imap/imap-match.c +++ b/src/lib-imap/imap-match.c @@ -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++; diff --git a/src/tests/test-imap.c b/src/tests/test-imap.c index cf08b37add..7605f100e1 100644 --- a/src/tests/test-imap.c +++ b/src/tests/test-imap.c @@ -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 }