From: Eric Wong Date: Fri, 15 Sep 2023 22:47:00 +0000 (+0000) Subject: lei q: set exit code for invalid Xapian queries X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=584d2d5fc4fb458792aef93c9802126d0722dfb1;p=thirdparty%2Fpublic-inbox.git lei q: set exit code for invalid Xapian queries Xapian can't parse every query, so ensure we set the exit code for the client. --- diff --git a/lib/PublicInbox/LeiXSearch.pm b/lib/PublicInbox/LeiXSearch.pm index 5965274ca..7f4911b34 100644 --- a/lib/PublicInbox/LeiXSearch.pm +++ b/lib/PublicInbox/LeiXSearch.pm @@ -186,7 +186,8 @@ sub query_one_mset { # for --threads and l2m w/o sort } my $first_ids; do { - $mset = $srch->mset($mo->{qstr}, $mo); + $mset = eval { $srch->mset($mo->{qstr}, $mo) }; + return $lei->child_error(22 << 8, "E: $@") if $@; # 22 from curl mset_progress($lei, $dir, $mo->{offset} + $mset->size, $mset->get_matches_estimated); wait_startq($lei); # wait for keyword updates @@ -249,7 +250,8 @@ sub query_combined_mset { # non-parallel for non-"--threads" users } my $each_smsg = $lei->{ovv}->ovv_each_smsg_cb($lei); do { - $mset = $self->mset($mo->{qstr}, $mo); + $mset = eval { $self->mset($mo->{qstr}, $mo) }; + return $lei->child_error(22 << 8, "E: $@") if $@; # 22 from curl mset_progress($lei, 'xsearch', $mo->{offset} + $mset->size, $mset->get_matches_estimated); wait_startq($lei); # wait for keyword updates diff --git a/t/lei.t b/t/lei.t index d83bde69f..1199ca755 100644 --- a/t/lei.t +++ b/t/lei.t @@ -147,6 +147,11 @@ my $test_fail = sub { lei_ok('q', "foo\n"); like($lei_err, qr/trailing `\\n' removed/s, "noted `\\n' removal"); + lei(qw(q from:infinity..)); + is($? >> 8, 22, 'combined query fails on invalid range op'); + lei(qw(q -t from:infinity..)); + is($? >> 8, 22, 'single query fails on invalid range op'); + for my $lk (qw(ei inbox)) { my $d = "$home/newline\n$lk"; my $all = $lk eq 'ei' ? 'ALL' : 'all';