]> git.g-eek.se Git - interimap.git/commitdiff
Ensure the inbox is always used in upper-case internally.
authorGuilhem Moulin <guilhem@fripost.org>
Thu, 3 Mar 2016 18:05:40 +0000 (19:05 +0100)
committerGuilhem Moulin <guilhem@fripost.org>
Thu, 3 Mar 2016 18:08:43 +0000 (19:08 +0100)
RFC 3501:

    INBOX is case-insensitive.  All case variants of INBOX (e.g., "iNbOx") MUST
    be interpreted as INBOX not as an astring.  An astring which consists of
    the case-insensitive sequence "I" "N" "B" "O" "X" is considered to be INBOX
    and not an astring.

lib/Net/IMAP/InterIMAP.pm

index 95bdfa8dc670a1ab3936132589ae4146be5967bb..c5b45aa0c4c6ff8bab8fc7eddceb942d34f88447 100644 (file)
@@ -734,6 +734,7 @@ sub rename($$$;$) {
 #   If $try is set, print a warning but don't crash if the command fails.
 sub subscribe($$;$) {
     my ($self, $mailbox, $try) = @_;
+    $mailbox = 'INBOX' if uc $mailbox eq 'INBOX'; # INBOX is case-insensitive
     my $r = $self->_send("SUBSCRIBE ".quote($mailbox));
     if ($IMAP_cond eq 'OK') {
         $self->log("Subscribe to ".$mailbox) unless $self->{quiet};
@@ -746,6 +747,7 @@ sub subscribe($$;$) {
 }
 sub unsubscribe($$;$) {
     my ($self, $mailbox, $try) = @_;
+    $mailbox = 'INBOX' if uc $mailbox eq 'INBOX'; # INBOX is case-insensitive
     my $r = $self->_send("UNSUBSCRIBE ".quote($mailbox));
     if ($IMAP_cond eq 'OK') {
         $self->log("Unsubscribe to ".$mailbox) unless $self->{quiet};
@@ -834,6 +836,7 @@ sub append($$@) {
 
     # dump the cache before issuing the command if we're appending to the current mailbox
     my ($UIDNEXT, $EXISTS, $cache, %vanished);
+    $mailbox = 'INBOX' if uc $mailbox eq 'INBOX'; # INBOX is case-insensitive
     if (defined $self->{_SELECTED} and $mailbox eq $self->{_SELECTED}) {
         $cache = $self->{_CACHE}->{$mailbox};
         $UIDNEXT = $cache->{UIDNEXT} // $self->panic();
@@ -973,6 +976,7 @@ sub slurp($) {
 sub set_cache($$%) {
     my $self = shift;
     my $mailbox = shift // $self->panic();
+    $mailbox = 'INBOX' if uc $mailbox eq 'INBOX'; # INBOX is case-insensitive
     my $cache = $self->{_PCACHE}->{$mailbox} //= {};
 
     my %status = @_;
@@ -999,6 +1003,7 @@ sub uidvalidity($;$) {
     my $self = shift;
     my $mailbox = shift;
     if (defined $mailbox) {
+        $mailbox = 'INBOX' if uc $mailbox eq 'INBOX'; # INBOX is case-insensitive
         my $cache = $self->{_CACHE}->{$mailbox} // return;
         return $cache->{UIDVALIDITY};
     }
@@ -1037,6 +1042,7 @@ sub get_cache($@) {
 #   internal cache is newer than its persistent cache.
 sub is_dirty($$) {
     my ($self, $mailbox) = @_;
+    $mailbox = 'INBOX' if uc $mailbox eq 'INBOX'; # INBOX is case-insensitive
     my $cache = $self->{_CACHE}->{$mailbox}   // return 1;
     my $pcache = $self->{_PCACHE}->{$mailbox} // return 1;
 
@@ -1917,11 +1923,11 @@ sub _select_or_examine($$$;$$) {
     my $mailbox = shift;
     my ($seqs, $uids) = @_;
 
+    $mailbox = uc $mailbox eq 'INBOX' ? 'INBOX' : $mailbox; # INBOX is case-insensitive
     my $pcache = $self->{_PCACHE}->{$mailbox} //= {};
     my $cache = $self->{_CACHE}->{$mailbox} //= {};
     $cache->{UIDVALIDITY} = $pcache->{UIDVALIDITY} if defined $pcache->{UIDVALIDITY};
 
-    $mailbox = uc $mailbox eq 'INBOX' ? 'INBOX' : $mailbox; # INBOX is case-insensitive
     $command .= ' '.quote($mailbox);
     if ($self->_enabled('QRESYNC') and ($pcache->{HIGHESTMODSEQ} // 0) > 0 and ($pcache->{UIDNEXT} // 1) > 1) {
         $command .= " (QRESYNC ($pcache->{UIDVALIDITY} $pcache->{HIGHESTMODSEQ} "