From: Eric Wong Date: Fri, 19 Feb 2021 12:09:53 +0000 (-0700) Subject: net_reader: handle single-message IMAP mailboxes X-Git-Tag: v1.7.0~1102 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=74e31aec6f66f695850bacf6379a034ea49a1d28;p=public-inbox.git net_reader: handle single-message IMAP mailboxes 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. --- diff --git a/lib/PublicInbox/NetReader.pm b/lib/PublicInbox/NetReader.pm index 61ea538b..22ba4be7 100644 --- a/lib/PublicInbox/NetReader.pm +++ b/lib/PublicInbox/NetReader.pm @@ -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