From 97cb0db690cc2065e7e3c33ea5f3636dc0b538c5 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 15 Jun 2020 03:30:03 +0000 Subject: imap: clarify "DONE" usage with IDLE "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(-) (limited to 'lib/PublicInbox/IMAP.pm') 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 // '*') . -- cgit v1.2.3-24-ge0c7