user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
* [PATCH] nntp: allow and ignore empty commands
@ 2018-04-18 20:30 Eric Wong
  0 siblings, 0 replies; only message in thread
From: Eric Wong @ 2018-04-18 20:30 UTC (permalink / raw)
  To: meta

Somebody hitting "\n" into telnet shouldn't hold a client up
indefinitely and prevent shutdown.
---
 lib/PublicInbox/NNTP.pm | 5 +++--
 t/nntpd.t               | 2 ++
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm
index 23be775..c574c9e 100644
--- a/lib/PublicInbox/NNTP.pm
+++ b/lib/PublicInbox/NNTP.pm
@@ -116,6 +116,7 @@ sub args_ok ($$) {
 sub process_line ($$) {
 	my ($self, $l) = @_;
 	my ($req, @args) = split(/\s+/, $l);
+	return unless defined($req);
 	$req = lc($req);
 	$req = eval {
 		no strict 'refs';
@@ -955,7 +956,7 @@ sub event_read {
 		$self->{rbuf} .= $$buf;
 	}
 	my $r = 1;
-	while ($r > 0 && $self->{rbuf} =~ s/\A\s*([^\r\n]+)\r?\n//) {
+	while ($r > 0 && $self->{rbuf} =~ s/\A\s*([^\r\n]*)\r?\n//) {
 		my $line = $1;
 		return $self->close if $line =~ /[[:cntrl:]]/s;
 		my $t0 = now();
@@ -975,7 +976,7 @@ sub event_read {
 sub watch_read {
 	my ($self, $bool) = @_;
 	my $rv = $self->SUPER::watch_read($bool);
-	if ($bool && $self->{rbuf} ne '') {
+	if ($bool && index($self->{rbuf}, "\n") >= 0) {
 		# Force another read if there is a pipelined request.
 		# We don't know if the socket has anything for us to read,
 		# and we must double-check again by the time the timer fires
diff --git a/t/nntpd.t b/t/nntpd.t
index 2815d8d..20191cb 100644
--- a/t/nntpd.t
+++ b/t/nntpd.t
@@ -122,6 +122,8 @@ EOF
 	is($buf, "201 server ready - post via email\r\n", 'got greeting');
 	$s->autoflush(1);
 
+	ok(syswrite($s, "   \r\n"), 'wrote spaces');
+	ok(syswrite($s, "\r\n"), 'wrote nothing');
 	syswrite($s, "NEWGROUPS\t19990424 000000 \033GMT\007\r\n");
 	is(0, sysread($s, $buf, 4096), 'GOT EOF on cntrl');
 
-- 
EW


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2018-04-18 20:30 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-18 20:30 [PATCH] nntp: allow and ignore empty commands Eric Wong

Code repositories for project(s) associated with this public inbox

	https://80x24.org/public-inbox.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).