]> Sergey Matveev's repositories - public-inbox.git/commitdiff
nntp: avoid infinite loop on partial read
authorEric Wong <e@80x24.org>
Thu, 24 Sep 2015 03:37:19 +0000 (03:37 +0000)
committerEric Wong <e@80x24.org>
Thu, 24 Sep 2015 06:58:32 +0000 (06:58 +0000)
Oops :x

lib/PublicInbox/NNTP.pm

index 52d6a64c2db45119953cc06d55d41ec59bcd0404..6c661a1bc3b8927e5449e1e647012cf66e8dc6cc 100644 (file)
@@ -879,22 +879,18 @@ sub event_write {
 sub event_read {
        my ($self) = @_;
        use constant LINE_MAX => 512; # RFC 977 section 2.3
-       my $line;
        my $r = 1;
-again:
+
+       my $buf = $self->read(LINE_MAX) or return $self->close;
+       $self->{rbuf} .= $$buf;
        while ($r > 0 && $self->{rbuf} =~ s/\A\s*([^\r\n]+)\r?\n//) {
-               $line = $1;
+               my $line = $1;
                my $t0 = now();
                $r = eval { $self->process_line($line) };
                my $d = $self->{long_res} ?
                        ' deferred['.fileno($self->{sock}).']' : '';
                out($self, "$line - %0.6f$d", now() - $t0);
        }
-       unless (defined $line) {
-               my $buf = $self->read(LINE_MAX) or return $self->close;
-               $self->{rbuf} .= $$buf;
-               goto again;
-       }
 
        return $self->close if $r < 0;
        my $len = length($self->{rbuf});