]> Sergey Matveev's repositories - public-inbox.git/commitdiff
net_reader: handle single-message IMAP mailboxes
authorEric Wong <e@80x24.org>
Fri, 19 Feb 2021 12:09:53 +0000 (05:09 -0700)
committerEric Wong <e@80x24.org>
Fri, 19 Feb 2021 19:25:24 +0000 (19:25 +0000)
Due to an off-by-one error, we were unable to read mailboxes
with only a single message of UID:1.  Without this fix, the
message with UID:1 could only be read after UID:2 was created;
so there's no permanent data loss as long as a new message
showed up.

This affects all releases of public-inbox-watch with IMAP
support, though it probably went unnoticed because single
message inboxes are rare.

lib/PublicInbox/NetReader.pm

index 61ea538b75cbcda7e8fdbf09df5bf3f498208a96..22ba4be74b813fbdffd0142c75e41d234b1fc5e3 100644 (file)
@@ -353,17 +353,18 @@ sub _imap_fetch_all ($$$) {
                        PublicInbox::IMAPTracker->new($url) : 0;
        my ($l_uidval, $l_uid) = $itrk ? $itrk->get_last : ();
        $l_uidval //= $r_uidval; # first time
-       $l_uid //= 1;
+       $l_uid //= 0;
        if ($l_uidval != $r_uidval) {
                return "E: $url UIDVALIDITY mismatch\n".
                        "E: local=$l_uidval != remote=$r_uidval";
        }
        my $r_uid = $r_uidnext - 1;
-       if ($l_uid != 1 && $l_uid > $r_uid) {
+       if ($l_uid > $r_uid) {
                return "E: $url local UID exceeds remote ($l_uid > $r_uid)\n".
                        "E: $url strangely, UIDVALIDLITY matches ($l_uidval)\n";
        }
        return if $l_uid >= $r_uid; # nothing to do
+       $l_uid ||= 1;
 
        warn "# $url fetching UID $l_uid:$r_uid\n" unless $self->{quiet};
        $mic->Uid(1); # the default, we hope