From: Eric Wong Date: Sun, 8 Sep 2019 10:41:12 +0000 (+0000) Subject: nntp: regexp always consumes rbuf if "\n" exists X-Git-Tag: v1.2.0~110 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;ds=sidebyside;h=16d96f80e55d3f40338101ee8641e03f3b4f2d64;p=public-inbox.git nntp: regexp always consumes rbuf if "\n" exists 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.. --- diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm index 41f1e9c1..c0496852 100644 --- a/lib/PublicInbox/NNTP.pm +++ b/lib/PublicInbox/NNTP.pm @@ -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();