diff options
-rw-r--r-- | lib/PublicInbox/SearchIdxShard.pm | 8 | ||||
-rw-r--r-- | t/v2writable.t | 12 |
2 files changed, 16 insertions, 4 deletions
diff --git a/lib/PublicInbox/SearchIdxShard.pm b/lib/PublicInbox/SearchIdxShard.pm index 1ea01095..06bcd403 100644 --- a/lib/PublicInbox/SearchIdxShard.pm +++ b/lib/PublicInbox/SearchIdxShard.pm @@ -69,8 +69,9 @@ sub shard_worker_loop ($$$$$) { $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"; @@ -93,7 +94,8 @@ sub shard_worker_loop ($$$$$) { 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; diff --git a/t/v2writable.t b/t/v2writable.t index cdcfe4d0..66d5663e 100644 --- a/t/v2writable.t +++ b/t/v2writable.t @@ -109,6 +109,11 @@ if ('ensure git configs are correct') { @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); } { @@ -175,8 +180,13 @@ EOF 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)}) { |