From 42a6fc1794099cb2585d3c290e42a20d5ef56b89 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 7 Jul 2020 20:37:37 +0000 Subject: [PATCH] imap: avoid warnings on non-slice mailboxes Non-slice mailboxes never have messages themselves, so we must not assume a message exists when sending untagged EXISTS messages. --- lib/PublicInbox/IMAP.pm | 1 + t/imapd.t | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/lib/PublicInbox/IMAP.pm b/lib/PublicInbox/IMAP.pm index d8c898f4..8ab4b1e7 100644 --- a/lib/PublicInbox/IMAP.pm +++ b/lib/PublicInbox/IMAP.pm @@ -246,6 +246,7 @@ sub uo2m_extend ($$;$) { my $base = $self->{uid_base}; ++$beg; my $uids = $self->{ibx}->over->uid_range($beg, $base + UID_SLICE); + return $uo2m if !scalar(@$uids); my @tmp; # [$UID_OFFSET] => $MSN my $write_method = $_[2] // 'msg_more'; if (ref($uo2m)) { diff --git a/t/imapd.t b/t/imapd.t index 1ac6a4ab..6cfced41 100644 --- a/t/imapd.t +++ b/t/imapd.t @@ -87,12 +87,16 @@ my $post_auth_anon_capa = $mic->capability; is_deeply($post_auth_anon_capa, $post_login_capa, 'auth anon has same capabilities'); my $e; +ok($mic->noop, 'NOOP'); +ok($mic->noop, 'NOOP (again)'); # for warnings ok(!$mic->examine('foo') && ($e = $@), 'EXAMINE non-existent'); like($e, qr/\bNO\b/, 'got a NO on EXAMINE for non-existent'); ok(!$mic->select('foo') && ($e = $@), 'EXAMINE non-existent'); like($e, qr/\bNO\b/, 'got a NO on EXAMINE for non-existent'); my $mailbox1 = "inbox.i1.$first_range"; ok($mic->select('inbox.i1'), 'SELECT on parent succeeds'); +ok($mic->noop, 'NOOP while selected'); +ok($mic->noop, 'NOOP again while selected'); # check warnings later ok($mic->select($mailbox1), 'SELECT succeeds'); ok($mic->examine($mailbox1), 'EXAMINE succeeds'); my @raw = $mic->status($mailbox1, qw(Messages uidnext uidvalidity)); -- 2.44.0