From cd1fbb7510c8d931cf0658d62ff66bdfbb079ef1 Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Thu, 25 Aug 2011 13:12:38 +0200 Subject: [PATCH] 6786: False detection of index names in Search; make index names case insensitive MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Fixing the regex to detect index names in ccl queries. Changing loop structure: looping through the index candidates in the query is faster than testing every index name with a regex. Making the index comparison case insensitive will benefit users misspelling the case of an index; Zebra does not care about it. Test the change by searching on a word followed by a : or = character. Previously, when that word contained an index name like an or nb, the search would crash. Signed-off-by: Frédéric Demians Signed-off-by: Paul Poulain Perltidied the new block to fix indentation Signed-off-by: Chris Cormack --- C4/Search.pm | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/C4/Search.pm b/C4/Search.pm index 343058adfb..b9069f5dda 100644 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -1072,15 +1072,14 @@ sub buildQuery { my $stopwords_removed; # flag to determine if stopwords have been removed - my $cclq; + my $cclq = 0; my $cclindexes = getIndexes(); - if( $query !~ /\s*ccl=/ ){ - for my $index (@$cclindexes){ - if($query =~ /($index)(,?\w)*[:=]/){ - $cclq = 1; - } + if ( $query !~ /\s*ccl=/ ) { + while ( !$cclq && $query =~ /(?:^|\W)(\w+)(,\w+)*[:=]/g ) { + my $dx = lc($1); + $cclq = grep { lc($_) eq $dx } @$cclindexes; } - $query = "ccl=$query" if($cclq); + $query = "ccl=$query" if $cclq; } # for handling ccl, cql, pqf queries in diagnostic mode, skip the rest of the steps -- 2.39.5