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 652FC1F5AE for ; Mon, 15 Jun 2020 03:30:03 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH] imap: clarify "DONE" usage with IDLE Date: Mon, 15 Jun 2020 03:30:03 +0000 Message-Id: <20200615033003.25436-1-e@yhbt.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: "DONE" is a continuation and not a normal IMAP command, so ensure it can't be called like a normal IMAP command which has a tag. --- lib/PublicInbox/IMAP.pm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/PublicInbox/IMAP.pm b/lib/PublicInbox/IMAP.pm index bc890517..9ae7c60e 100644 --- a/lib/PublicInbox/IMAP.pm +++ b/lib/PublicInbox/IMAP.pm @@ -358,7 +358,7 @@ sub stop_idle ($$) { $ibx->unsubscribe_unlock($fd); } -sub cmd_done ($$) { +sub idle_done ($$) { my ($self, $tag) = @_; # $tag is "DONE" (case-insensitive) defined(my $idle_tag = delete $self->{-idle_tag}) or return "$tag BAD not idle\r\n"; @@ -1310,12 +1310,12 @@ sub process_line ($$) { $req .= "_".(shift @args); } my $res = eval { - if (my $cmd = $self->can('cmd_'.lc($req // ''))) { - defined($self->{-idle_tag}) ? - "$self->{-idle_tag} BAD expected DONE\r\n" : - $cmd->($self, $tag, @args); - } elsif (uc($tag // '') eq 'DONE' && !defined($req)) { - cmd_done($self, $tag); + if (defined(my $idle_tag = $self->{-idle_tag})) { + (uc($tag // '') eq 'DONE' && !defined($req)) ? + idle_done($self, $tag) : + "$idle_tag BAD expected DONE\r\n"; + } elsif (my $cmd = $self->can('cmd_'.lc($req // ''))) { + $cmd->($self, $tag, @args); } else { # this is weird auth_challenge_ok($self) // ($tag // '*') .