]> Sergey Matveev's repositories - public-inbox.git/commitdiff
nntp: regexp always consumes rbuf if "\n" exists
authorEric Wong <e@80x24.org>
Sun, 8 Sep 2019 10:41:12 +0000 (10:41 +0000)
committerEric Wong <e@80x24.org>
Sun, 8 Sep 2019 10:42:12 +0000 (10:42 +0000)
We don't want to get hung into a state where we see "\n" via
index(), yet cannot consume rbuf in the while loop.  So tweak
the regexp to ensure we always consume rbuf.

I suspect this is what causes occasional 100% CPU usage of
-nntpd, but reproducing it's been difficult..

lib/PublicInbox/NNTP.pm

index 41f1e9c1ed9e6a5321b1ead30853419b43fad644..c04968529854067ef4152f62f38588bd82314b1a 100644 (file)
@@ -995,7 +995,7 @@ sub event_step {
                my $off = bytes::length($$rbuf);
                $r = $self->do_read($rbuf, LINE_MAX, $off) or return;
        }
-       while ($r > 0 && $$rbuf =~ s/\A[ \t\r\n]*([^\r\n]*)\r?\n//) {
+       while ($r > 0 && $$rbuf =~ s/\A[ \t]*([^\n]*?)\r?\n//) {
                my $line = $1;
                return $self->close if $line =~ /[[:cntrl:]]/s;
                my $t0 = now();