lib/PublicInbox/URIimap.pm | 3 +++ t/uri_imap.t | 8 ++++++++ diff --git a/lib/PublicInbox/URIimap.pm b/lib/PublicInbox/URIimap.pm index dc19346815556095f8ae056033f819d20b318905..df9f5fd9ebeff2040066afac23ef0655c362f42c 100644 --- a/lib/PublicInbox/URIimap.pm +++ b/lib/PublicInbox/URIimap.pm @@ -30,6 +30,9 @@ # no #frag in RFC 5092 from what I can tell my ($scheme, $auth, $path, $query, $_frag) = uri_split($$self); $path =~ s!\A/+!/!; # excessive leading slash + # upper-case uidvalidity= and uid= parameter names + $path =~ s/;([^=]+)=([^;]*)/;\U$1\E=$2/g; + # lowercase the host portion $auth =~ s#\A(.*@)?(.*?)(?::([0-9]+))?\z# my $ret = ($1//'').lc($2); diff --git a/t/uri_imap.t b/t/uri_imap.t index e2aadf8420dccce17f865e54026f4090ac4d34f4..ed24fc1be073af311587bcc2904f4f8fb075290b 100644 --- a/t/uri_imap.t +++ b/t/uri_imap.t @@ -79,7 +79,11 @@ is($uri->uidvalidity(2), 2, 'iuid set'); is($$uri, 'imap://0/mmm;UIDVALIDITY=2', 'uidvalidity appended'); is($uri->iuid, undef, 'no iuid'); +is(PublicInbox::URIimap->new('imap://0/x;uidvalidity=1')->canonical->as_string, + 'imap://0/x;UIDVALIDITY=1', 'capitalized UIDVALIDITY'); + $uri = PublicInbox::URIimap->new('imap://0/mmm/;uid=8'); +is($uri->canonical->as_string, 'imap://0/mmm/;UID=8', 'canonicalized UID'); is($uri->mailbox, 'mmm', 'mailbox works with iuid'); is($uri->iuid, 8, 'iuid extracted'); is($uri->iuid(9), 9, 'iuid set'); @@ -92,5 +96,9 @@ is($$uri, 'imap://0/mmm;UIDVALIDITY=4/;UID=9', 'uidvalidity replaced with iuid'); is($uri->iuid(3), 3, 'iuid set with uidvalidity'); is($$uri, 'imap://0/mmm;UIDVALIDITY=4/;UID=3', 'iuid replaced properly'); + +my $lc = lc($$uri); +is(PublicInbox::URIimap->new($lc)->canonical->as_string, "$$uri", + 'canonical uppercased both params'); done_testing;