From fcbd81049f590e5fc0c31030bcdb1311951c1444 Mon Sep 17 00:00:00 2001 From: David Cook Date: Fri, 5 Feb 2016 16:09:45 +1100 Subject: [PATCH] Bug 15745: C4::Matcher gets CCL parsing error if term contains ? (question mark) Signed-off-by: Olli-Antti Kivilahti Also fixes ! and + Rebased to master Signed-off-by: Tomas Cohen Arazi It makes perfect sense and works as expected. This part of the code is too under-tested so no point requiring a regression test for such a simple change. Signed-off-by: Brendan A Gallagher --- C4/Matcher.pm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/C4/Matcher.pm b/C4/Matcher.pm index 8cf1a99014..9e04758bf7 100644 --- a/C4/Matcher.pm +++ b/C4/Matcher.pm @@ -651,7 +651,8 @@ sub get_matches { else { my $phr = C4::Context->preference('AggressiveMatchOnISBN') ? ',phr' : q{}; $query = join( " or ", - map { "$matchpoint->{'index'}$phr=$_" } @source_keys ); + map { "$matchpoint->{'index'}$phr=\"$_\"" } @source_keys ); + #NOTE: double-quote the values so you don't get a "Embedded truncation not supported" error when a term has a ? in it. } require C4::Search; @@ -807,7 +808,7 @@ sub _get_match_keys { } else { foreach my $subfield ($field->subfields()) { if (exists $component->{'subfields'}->{$subfield->[0]}) { - $string .= " " . $subfield->[1]; + $string .= " " . $subfield->[1]; #FIXME: It would be better to create an array and join with a space later... } } } -- 2.39.5