$self->remove_by_oid($oid, $mid);
} else {
chomp $line;
- my ($bytes, $num, $blob, $mid, $ds, $ts) =
- split(/ /, $line);
+ # n.b. $mid may contain spaces(!)
+ my ($bytes, $num, $blob, $ds, $ts, $mid) =
+ split(/ /, $line, 6);
$self->begin_txn_lazy;
my $n = read($r, my $msg, $bytes) or die "read: $!\n";
$n == $bytes or die "short read: $n != $bytes\n";
sub index_raw {
my ($self, $msgref, $mime, $smsg) = @_;
if (my $w = $self->{w}) {
- print $w join(' ', @$smsg{qw(bytes num blob mid ds ts)}),
+ # mid must be last, it can contain spaces (but not LF)
+ print $w join(' ', @$smsg{qw(bytes num blob ds ts mid)}),
"\n", $$msgref or die "failed to write shard $!\n";
} else {
$$msgref = undef;
@mids = $mime->header_obj->header_raw('Message-Id');
like($mids[0], $sane_mid, 'mid was generated');
is(scalar(@mids), 1, 'new generated');
+
+ @warn = ();
+ $mime->header_set('Message-Id', '<space@ (NXDOMAIN) >');
+ ok($im->add($mime), 'message added with space in Message-Id');
+ is_deeply([], \@warn);
}
{
is($uniq{$mid}++, 0, "MID for $num is unique in XOVER");
is_deeply($n->xhdr('Message-ID', $num),
{ $num => $mid }, "XHDR lookup OK on num $num");
+
+ # FIXME PublicInbox::NNTP (server) doesn't handle spaces in
+ # Message-ID, but neither does Net::NNTP (client)
+ next if $mid =~ / /;
+
is_deeply($n->xhdr('Message-ID', $mid),
- { $mid => $mid }, "XHDR lookup OK on MID $num");
+ { $mid => $mid }, "XHDR lookup OK on MID $mid ($num)");
}
my %nn;
foreach my $mid (@{$n->newnews(0, $group)}) {