Bug 8783

Summary: Parentheses not escaped properly in queries when using XSLT
Product: Koha Reporter: Kyle M Hall <kyle>
Component: SearchingAssignee: Galen Charlton <gmcharlt>
Status: RESOLVED DUPLICATE QA Contact:
Severity: major    
Priority: P3    
Version: Main   
Hardware: All   
OS: All   
See Also: http://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=1807
http://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=6553
Change sponsored?: --- Patch complexity: ---
Documentation contact: Documentation submission:
Text to go in the release notes:
Version(s) released in:

Description Kyle M Hall 2012-09-18 12:20:35 UTC
When XSLT is enabled, searching on subjects containing parentheses cause an error. The problem is the parens are not escaped properly, and so are interpreted as part of the query language, rather than the query string.

For example, this query fails:
(su:{Baggins, Frodo (Fictitious character)}) AND (su:{Fiction})
but this query works:
(su:{Baggins, Frodo \(Fictitious character\)}) AND (su:{Fiction})

I think the problem is within the xslt template subfieldSelect. Interestingly, with XSLT off, each subject shows up as an individual link ( so one link for Frogo, and one link for Ficition ) whereas with XSLT on, they subjects are combined with an AND.
Comment 1 Kyle M Hall 2012-12-04 15:02:13 UTC
This works, but puts parens around every field visually. I think we need to split the subfieldSelect template into subfieldSelectVisual and subfieldSelectNonvisual ( or some naming along those lines ) with the quotes in the nonvisual one, but not in the visual one. Alternatively, I think we could pass an additional parameter in to add the quotes.

diff --git a/koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slimUtils.xsl b/koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slimUtils.xsl
index df7c450..1852a56 100644
--- a/koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slimUtils.xsl
+++ b/koha-tmpl/opac-tmpl/prog/en/xslt/MARC21slimUtils.xsl
@@ -33,7 +33,7 @@
                     <xsl:if test="contains($subdivCodes, @code)">
                         <xsl:value-of select="$subdivDelimiter"/>
                     </xsl:if>
-                                       <xsl:value-of select="$prefix"/><xsl:value-of select="text()"/><xsl:value-of select="$suffix"/><xsl:value-of select="$delimeter"/>
+                                        <xsl:value-of select="$prefix"/>"<xsl:value-of select="text()"/>"<xsl:value-of select="$suffix"/><xsl:value-of select="$delimeter"/>
                                </xsl:if>
                        </xsl:for-each>
                </xsl:variable>
Comment 2 Kyle M Hall 2014-01-14 20:35:16 UTC

*** This bug has been marked as a duplicate of bug 9212 ***