From fb7702f0888e9bdad98f33c09c4048625322a688 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 26 Apr 2021 11:44:25 +0000 Subject: URIimap: canonicalize uppercases UIDVALIDITY parameter And the UID one, too, as well. This simplifies future comparison and matching code once case is no longer taken into account. --- lib/PublicInbox/URIimap.pm | 3 +++ t/uri_imap.t | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/lib/PublicInbox/URIimap.pm b/lib/PublicInbox/URIimap.pm index dc193468..df9f5fd9 100644 --- a/lib/PublicInbox/URIimap.pm +++ b/lib/PublicInbox/URIimap.pm @@ -30,6 +30,9 @@ sub canonical { 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 e2aadf84..ed24fc1b 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'); @@ -93,4 +97,8 @@ is($$uri, 'imap://0/mmm;UIDVALIDITY=4/;UID=9', 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; -- cgit v1.2.3-24-ge0c7