about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2019-01-20 12:33:20 +0000
committerEric Wong <e@80x24.org>2019-01-20 12:37:08 +0000
commit54be6d7a117a300e46601537b4392c0174444966 (patch)
tree18c1092408238e9a2d052442123acf84ba3c6ab7 /lib
parent55db8a2a51c13aec813ac56bbaac1505791fd262 (diff)
downloadpublic-inbox-54be6d7a117a300e46601537b4392c0174444966.tar.gz
extmsg: don't bother partial matching with <16 chars
It's not worth it, and attempts to wildcard off
single-character Message-IDs(*) causes Xapian to error
out in unpredictable ways:

  something terrible happened at /usr/lib/x86_64-linux-gnu/perl5/5.24/Search/Xapian/Enquire.pm line 54.
    ...propagated at lib/PublicInbox/Search.pm line 209.

So don't bother.

(*) because people blindly hit 'y' or 'n' when git-send-email
    prompted them for In-Reply-To.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/ExtMsg.pm16
1 files changed, 9 insertions, 7 deletions
diff --git a/lib/PublicInbox/ExtMsg.pm b/lib/PublicInbox/ExtMsg.pm
index 51e7799d..14d49cc5 100644
--- a/lib/PublicInbox/ExtMsg.pm
+++ b/lib/PublicInbox/ExtMsg.pm
@@ -11,6 +11,7 @@ use warnings;
 use PublicInbox::Hval;
 use PublicInbox::MID qw/mid2path/;
 use PublicInbox::WwwStream;
+our $MIN_PARTIAL_LEN = 16;
 
 # TODO: user-configurable
 our @EXT_URL = (
@@ -30,6 +31,7 @@ sub PARTIAL_MAX () { 100 }
 
 sub search_partial ($$) {
         my ($srch, $mid) = @_;
+        return if length($mid) < $MIN_PARTIAL_LEN;
         my $opt = { limit => PARTIAL_MAX, mset => 2 };
         my @try = ("m:$mid*");
         my $chop = $mid;
@@ -58,12 +60,12 @@ sub search_partial ($$) {
         }
 
         foreach my $m (@try) {
-                my $mset = eval { $srch->query($m, $opt) };
-                if (ref($@) eq 'Search::Xapian::QueryParserError') {
-                        # If Xapian can't handle the wildcard since it
-                        # has too many results.
-                        next;
-                }
+                # If Xapian can't handle the wildcard since it
+                # has too many results.  $@ can be
+                # Search::Xapian::QueryParserError or even:
+                # "something terrible happened at ../Search/Xapian/Enquire.pm"
+                my $mset = eval { $srch->query($m, $opt) } or next;
+
                 my @mids = map {
                         my $doc = $_->get_document;
                         PublicInbox::SearchMsg->load_doc($doc)->mid;
@@ -112,7 +114,7 @@ sub ext_msg {
         }
 
         # can't find a partial match in current inbox, try the others:
-        if (!$n_partial && length($mid) >= 16) {
+        if (!$n_partial && length($mid) >= $MIN_PARTIAL_LEN) {
                 foreach my $ibx (@ibx) {
                         $srch = $ibx->search or next;
                         $mids = search_partial($srch, $mid) or next;