Scarab commit: svn commit: r10652 - trunk/src/java/org/tigris/scarab/util/word/IssueSearch.java
[email protected] 1 Dec 2008 15:12:08 -0000
Newsgroups
gmane.comp.java.scarab.cvs
Message-ID
<[email protected] >
Author: jhoech
Date: 2008-12-01 07:12:08-0800
New Revision: 10652
Modified:
trunk/src/java/org/tigris/scarab/util/word/IssueSearch.java
Log:
Issue SCB2627 - sensitive characters in AttributeValue (if StringAttribute) are escaped in Issue Serach. These characters are: "\, +, -, !, (, ), :, ^, ], {, }, ~, *, ?"
Modified: trunk/src/java/org/tigris/scarab/util/word/IssueSearch.java
Url: http://scarab.tigris.org/source/browse/scarab/trunk/src/java/org/tigris/scarab/util/word/IssueSearch.java?view=diff&rev=10652&p1=trunk/src/java/org/tigris/scarab/util/word/IssueSearch.java&p2=trunk/src/java/org/tigris/scarab/util/word/IssueSearch.java&r1=10651&r2=10652
==============================================================================
--- trunk/src/java/org/tigris/scarab/util/word/IssueSearch.java (original)
+++ trunk/src/java/org/tigris/scarab/util/word/IssueSearch.java 2008-12-01 07:12:08-0800
@@ -142,6 +142,12 @@
Pattern.CASE_INSENSITIVE
);
+ /**
+ * all characters, which have to escaped for
+ * org.apache.lucene.queryParser.QueryParser
+ */
+ private static final String[] CHARACTERS_WHICH_HAVE_TO_BE_ESCAPED= {"\\", "+", "-", "!", "(", ")", ":", "^", "]", "{", "}", "~", "*", "?"};
+
private SimpleDateFormat formatter;
private ScarabUser searchingUser;
@@ -1037,7 +1043,9 @@
}
else if (aval instanceof StringAttribute)
{
- query.addAttrClause(aval);
+ AttributeValue copyAval = aval.copy();
+ copyAval.setValue(escapeSpecialCharacters(copyAval.getValue()));
+ query.addAttrClause(copyAval);
}
}
}
@@ -1815,4 +1823,20 @@
}
}
}
+
+ /**
+ * escapes all characters from array in CHARACTERS_WHICH_HAVE_TO_BE_ESCAPED
+ * @param text
+ * @return
+ */
+ private String escapeSpecialCharacters(String text){
+ String returnValue = text;
+
+ for(int i=0; i < CHARACTERS_WHICH_HAVE_TO_BE_ESCAPED.length;i++){
+ returnValue = StringUtils.replace(returnValue, CHARACTERS_WHICH_HAVE_TO_BE_ESCAPED[i],
+ "\\"+CHARACTERS_WHICH_HAVE_TO_BE_ESCAPED[i]);
+ }
+
+ return returnValue;
+ }
}