Incorrect parsing by QueryParser.parse() when it encounters backslashes (always 
eats one backslash.)
----------------------------------------------------------------------------------------------------

                 Key: LUCENE-800
                 URL: https://issues.apache.org/jira/browse/LUCENE-800
             Project: Lucene - Java
          Issue Type: Bug
          Components: QueryParser
            Reporter: Dilip Nimkar


Test code and output follow. Tested  Lucene 1.9 version only. Affects hose who 
would index/search for Lucene's reserved characters.

Description: When an input search string has a sequence of N (java-escaped) 
backslashes, where N >= 2, the QueryParser will produce a query in which that 
sequence has N-1 backslashes.

TEST CODE:
    Analyzer analyzer = new WhitespaceAnalyzer();
    String[] queryStrs = {"item:\\\\",
                          "item:\\\\*",
                          "(item:\\\\ item:ABCD\\\\))",
                          "(item:\\\\ item:ABCD\\\\)"};
    for (String queryStr : queryStrs) {
      System.out.println("--------------------------------------");
      System.out.println("String queryStr = " + queryStr);
      Query luceneQuery = null;
      try {
        luceneQuery = new QueryParser("_default_", analyzer).parse(queryStr);
        System.out.println("luceneQuery.toString() = " + 
luceneQuery.toString());
      } catch (Exception e) {
        System.out.println(e.getClass().toString());
      }
    }

OUTPUT (with remarks in comment notation:) 
--------------------------------------
String queryStr = item:\\
luceneQuery.toString() = item:\             //One backslash has disappeared. 
Searcher will fail on this query.
--------------------------------------
String queryStr = item:\\*
luceneQuery.toString() = item:\*           //One backslash has disappeared. 
This query will search for something unintended.
--------------------------------------
String queryStr = (item:\\ item:ABCD\\))
luceneQuery.toString() = item:\ item:ABCD\)     //This should have thrown a 
ParseException because of an unescaped ')'. It did not.
--------------------------------------
String queryStr = (item:\\ item:ABCD\\)
class org.apache.lucene.queryParser.ParseException        //...and this one 
should not have, but it did.



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to