about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-07-13 21:38:11 +0000
committerEric Wong <e@80x24.org>2019-07-13 21:49:42 +0000
commitaca2d958e5bf80d19d69f66d2c1ec6809fece29a (patch)
tree6249ff2170fd10456b1a43849046d5bd2190ed87
parenta090752ccc1bdbe5d90ec54dbecbb1a44f3f8091 (diff)
downloadpublic-inbox-aca2d958e5bf80d19d69f66d2c1ec6809fece29a.tar.gz
RFC3977 8.4.2 mandates the order of non-standard headers
to be after the first seven standard headers/metadata;
so "Xref:" must appear after "Lines:"|":lines".

Additionally, non-required header names must be followed
by ":full".

Cc: Jonathan Corbet <corbet@lwn.net>
Reported-by: Urs Janßen
	<E1hmKBw-0008Bq-8t@akw>
-rw-r--r--lib/PublicInbox/NNTP.pm5
-rw-r--r--t/nntpd.t6
2 files changed, 9 insertions, 2 deletions
diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm
index 0d2bc4f3..800ce926 100644
--- a/lib/PublicInbox/NNTP.pm
+++ b/lib/PublicInbox/NNTP.pm
@@ -29,8 +29,9 @@ use constant {
 use PublicInbox::Syscall qw(EPOLLIN EPOLLONESHOT);
 use Errno qw(EAGAIN);
 
-my @OVERVIEW = qw(Subject From Date Message-ID References Xref);
-my $OVERVIEW_FMT = join(":\r\n", @OVERVIEW, qw(Bytes Lines)) . ":\r\n";
+my @OVERVIEW = qw(Subject From Date Message-ID References);
+my $OVERVIEW_FMT = join(":\r\n", @OVERVIEW, qw(Bytes Lines), '') .
+                "Xref:full\r\n";
 my $LIST_HEADERS = join("\r\n", @OVERVIEW,
                         qw(:bytes :lines Xref To Cc)) . "\r\n";
 my $CAPABILITIES = <<"";
diff --git a/t/nntpd.t b/t/nntpd.t
index e264fa6b..bebecc69 100644
--- a/t/nntpd.t
+++ b/t/nntpd.t
@@ -101,6 +101,12 @@ EOF
         is_deeply([$n->group($group)], [ qw(0 1 1), $group ], 'GROUP works');
         is_deeply($n->listgroup($group), [1], 'listgroup OK');
 
+        {
+                my $expect = [ qw(Subject: From: Date: Message-ID:
+                                References: Bytes: Lines: Xref:full) ];
+                is_deeply($n->overview_fmt, $expect,
+                        'RFC3977 8.4.2 compliant LIST OVERVIEW.FMT');
+        }
         SKIP: {
                 $n->can('starttls') or
                         skip('Net::NNTP too old to support STARTTLS', 2);