From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 77C1F1F8DB for ; Tue, 7 Jul 2020 20:37:39 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 4/5] imap: avoid warnings on non-slice mailboxes Date: Tue, 7 Jul 2020 20:37:37 +0000 Message-Id: <20200707203738.32677-5-e@yhbt.net> In-Reply-To: <20200707203738.32677-1-e@yhbt.net> References: <20200707203738.32677-1-e@yhbt.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: 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 d8c898f4b..8ab4b1e7d 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 1ac6a4ab6..6cfced411 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));