about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@yhbt.net>2020-06-10 07:04:47 +0000
committerEric Wong <e@yhbt.net>2020-06-13 07:55:45 +0000
commit0e6cf7c861657f79011b90036b5ade4d209ae60f (patch)
treeda22899a2338fc77a58e5fcb55a6a6b628fb43b3
parent59f7d24923af08155469420e43e04bce398065da (diff)
downloadpublic-inbox-0e6cf7c861657f79011b90036b5ade4d209ae60f.tar.gz
No point in spewing "uninitialized" warnings into logs when
the cat jumps on the Enter key.
-rw-r--r--lib/PublicInbox/IMAP.pm7
-rw-r--r--t/imapd.t11
2 files changed, 16 insertions, 2 deletions
diff --git a/lib/PublicInbox/IMAP.pm b/lib/PublicInbox/IMAP.pm
index e726307a..0452d6df 100644
--- a/lib/PublicInbox/IMAP.pm
+++ b/lib/PublicInbox/IMAP.pm
@@ -862,14 +862,17 @@ sub process_line ($$) {
                         cmd_done($self, $tag);
                 } else { # this is weird
                         auth_challenge_ok($self) //
-                                "$tag BAD Error in IMAP command $req: ".
-                                "Unknown command\r\n";
+                                        ($tag // '*') .
+                                        ' BAD Error in IMAP command '.
+                                        ($req // '(???)').
+                                        ": Unknown command\r\n";
                 }
         };
         my $err = $@;
         if ($err && $self->{sock}) {
                 $l =~ s/\r?\n//s;
                 err($self, 'error from: %s (%s)', $l, $err);
+                $tag //= '*';
                 $res = "$tag BAD program fault - command not performed\r\n";
         }
         return 0 unless defined $res;
diff --git a/t/imapd.t b/t/imapd.t
index 45ee401a..11b56b09 100644
--- a/t/imapd.t
+++ b/t/imapd.t
@@ -367,11 +367,22 @@ ok($mic->close, 'CLOSE works');
 ok(!$mic->close, 'CLOSE not idempotent');
 ok($mic->logout, 'logged out');
 
+{
+        my $c = tcp_connect($sock);
+        $c->autoflush(1);
+        like(<$c>, qr/\* OK/, 'got a greeting');
+        print $c "\r\n";
+        like(<$c>, qr/\A\* BAD Error in IMAP command/, 'empty line');
+        print $c "tagonly\r\n";
+        like(<$c>, qr/\Atagonly BAD Error in IMAP command/, 'tag-only line');
+}
+
 $td->kill;
 $td->join;
 is($?, 0, 'no error in exited process');
 open my $fh, '<', $err or BAIL_OUT("open $err failed: $!");
 my $eout = do { local $/; <$fh> };
 unlike($eout, qr/wide/i, 'no Wide character warnings');
+unlike($eout, qr/uninitialized/i, 'no uninitialized warnings');
 
 done_testing;