Scarab commit: svn commit: r10652 - trunk/src/java/org/tigris/scarab/util/word/IssueSearch.java

[email protected]
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;
+    }
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.