lib/PublicInbox/Mbox.pm | 7 ++++++- lib/PublicInbox/SearchView.pm | 1 + t/psgi_search.t | 4 ++++ diff --git a/lib/PublicInbox/Mbox.pm b/lib/PublicInbox/Mbox.pm index 84cc384529f174cd020bbfb2360519720b5d0929..04c86cc196515e345d36491b200a1d29f3e4bd17 100644 --- a/lib/PublicInbox/Mbox.pm +++ b/lib/PublicInbox/Mbox.pm @@ -157,7 +157,12 @@ my $body = $class->new($ctx, $cb); # http://www.iana.org/assignments/media-types/application/gzip $body->{hdr} = [ 'Content-Type', 'application/gzip' ]; $body->{fn} = $fn; - my $hdr = $body->getline; # fill in Content-Disposition filename + # fill in Content-Disposition filename + my $hdr = $body->getline; + if ($body->{hdr}) { + return [ 404, ['Content-Type','text/plain'], + [ "No results found\n" ] ]; + } [ 200, $hdr, $body ]; } diff --git a/lib/PublicInbox/SearchView.pm b/lib/PublicInbox/SearchView.pm index 219006a0d7070dbfc58530255eba7aeba1919ff4..1c4442e4d7b8a300775c817aac435b47da9abb56 100644 --- a/lib/PublicInbox/SearchView.pm +++ b/lib/PublicInbox/SearchView.pm @@ -22,6 +22,7 @@ sub mbox_results { my ($ctx) = @_; my $q = PublicInbox::SearchQuery->new($ctx->{qp}); my $x = $q->{x}; + require PublicInbox::Mbox; return PublicInbox::Mbox::mbox_all($ctx, $q->{'q'}) if $x eq 'm'; sres_top_html($ctx); } diff --git a/t/psgi_search.t b/t/psgi_search.t index 84b3daa3402ac071b4562addc70ef3e6e547e71d..cf5a7e91b04de15ec9e77d82ac4824a8d03c57a4 100644 --- a/t/psgi_search.t +++ b/t/psgi_search.t @@ -70,6 +70,10 @@ local $SIG{__WARN__} = sub { push @$warn, @_ }; $res = $cb->(GET('/test/?q=s:test&l=5e')); is($res->code, 200, 'successful search result'); is_deeply([], $warn, 'no warnings from non-numeric comparison'); + + $res = $cb->(POST('/test/?q=s:bogus&x=m')); + is($res->code, 404, 'failed search result gives 404'); + is_deeply([], $warn, 'no warnings'); }); done_testing();