From fd385d90b8063d5cbdb0e5d1cf76e99b9c58cc84 Mon Sep 17 00:00:00 2001 From: David Cook Date: Mon, 30 May 2022 03:31:44 +0000 Subject: [PATCH] Bug 30865: Double-quote Host-item in Koha::Biblio->get_components_query This patch adds double quotes around the term qualified by "Host-item" in Koha::Biblio->get_components_query(). Without them, reserved charactrs like "=" will cause syntax errors like "CCL parsing error (10014) Unknown qualifier ZOOM for query: Host-item=(MyTitle = Mysubtitle) at /usr/share/koha/lib/C4/Search.pm line 245." Test plan: 0) Don't apply the patch 1) Create biblio with title and subtitle like (MyTitle : MySubtitle) 2) Note the warning "There was an error searching for analytic records, please see the logs for details." on the detail page 3) Apply the patch 4) koha-plack --restart kohadev 5) Refresh the detail page 6) Note that the warning message is gone 7) prove t/db_dependent/Koha/Biblio.t Signed-off-by: Martin Renvoize Signed-off-by: Tomas Cohen Arazi --- Koha/Biblio.pm | 2 +- t/db_dependent/Koha/Biblio.t | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Koha/Biblio.pm b/Koha/Biblio.pm index c6924e146c..1fc0a57c26 100644 --- a/Koha/Biblio.pm +++ b/Koha/Biblio.pm @@ -598,7 +598,7 @@ sub get_components_query { my $cleaned_title = $marc->subfield('245', "a"); $cleaned_title =~ tr|/||; $cleaned_title = $builder->clean_search_term($cleaned_title); - $searchstr = "Host-item:($cleaned_title)"; + $searchstr = qq#Host-item:("$cleaned_title")#; } my ($error, $query_str) = $builder->build_query_compat( undef, [$searchstr], undef, undef, [$sort], 0 ); if( $error ){ diff --git a/t/db_dependent/Koha/Biblio.t b/t/db_dependent/Koha/Biblio.t index dc9f0b9bcc..14fab65a60 100755 --- a/t/db_dependent/Koha/Biblio.t +++ b/t/db_dependent/Koha/Biblio.t @@ -572,7 +572,7 @@ subtest 'get_components_query' => sub { t::lib::Mocks::mock_preference( 'ComponentSortField', 'author' ); t::lib::Mocks::mock_preference( 'ComponentSortOrder', 'za' ); my ( $comp_q, $comp_s ) = $biblio->get_components_query; - is($comp_q, "Host-item:(Some boring read)",, "UseControlNumber disabled"); + is($comp_q, 'Host-item:("Some boring read")', "UseControlNumber disabled"); is($comp_s, "author_za", "UseControlNumber disabled sort is correct"); t::lib::Mocks::mock_preference( 'UseControlNumber', '1' ); -- 2.39.2