[ 
https://issues.apache.org/jira/browse/LUCENE-6347?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Paul taylor updated LUCENE-6347:
--------------------------------
    Description: 
MultiFieldQueryParser doesnt catch invalid syntax properly (due to user using 
regexpression syntax unwittingly)

{code} 
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.util.Version;
import org.junit.Test;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

/**
 * Lucene tests
 */
public class LuceneRegExParseTest
{

    @Test
    public void testSearch411LuceneBugReport() throws Exception
    {
        Exception e = null;
        try
        {
            String[] fields = new String[2];
            fields[0] = "artist";
            fields[1] = "recording";

            QueryParser qp = new MultiFieldQueryParser(Version.LUCENE_41, 
fields, new StandardAnalyzer(Version.LUCENE_41));
            qp.parse("artist:pandora /reyli  recording:yo/Alguien");
        }
        catch(Exception ex)
        {
            e=ex;
        }
        assertNotNull(e);
        assertTrue(e instanceof ParseException );
    }
}
{code}
With assertions disabled this test fails as no exception is thrown.
With assertions enabled we get

{code}
java.lang.AssertionError
        at 
org.apache.lucene.search.MultiTermQuery.<init>(MultiTermQuery.java:252)
        at 
org.apache.lucene.search.AutomatonQuery.<init>(AutomatonQuery.java:65)
        at org.apache.lucene.search.RegexpQuery.<init>(RegexpQuery.java:90)
        at org.apache.lucene.search.RegexpQuery.<init>(RegexpQuery.java:79)
        at org.apache.lucene.search.RegexpQuery.<init>(RegexpQuery.java:69)
        at 
org.apache.lucene.queryparser.classic.QueryParserBase.newRegexpQuery(QueryParserBase.java:790)
        at 
org.apache.lucene.queryparser.classic.QueryParserBase.getRegexpQuery(QueryParserBase.java:1005)
        at 
org.apache.lucene.queryparser.classic.QueryParserBase.handleBareTokenQuery(QueryParserBase.java:1075)
        at 
org.apache.lucene.queryparser.classic.QueryParser.Term(QueryParser.java:359)
        at 
org.apache.lucene.queryparser.classic.QueryParser.Clause(QueryParser.java:258)
        at 
org.apache.lucene.queryparser.classic.QueryParser.Query(QueryParser.java:213)
        at 
org.apache.lucene.queryparser.classic.QueryParser.TopLevelQuery(QueryParser.java:171)
        at 
org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:120)
        at 
org.musicbrainz.search.servlet.LuceneRegExParseTest.testSearch411LuceneBugReport(LuceneRegExParseTest.java:30)

but this should throw an exception without assertions enabled. Because no 
exception is thrown a search then faikls with the following stack trace

java.lang.NullPointerException
at java.util.TreeMap.getEntry(TreeMap.java:342)
at java.util.TreeMap.get(TreeMap.java:273)
at 
org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsReader.terms(PerFieldPostingsFormat.java:215)
at 
org.apache.lucene.search.TermCollectingRewrite.collectTerms(TermCollectingRewrite.java:58)
at 
org.apache.lucene.search.ConstantScoreAutoRewrite.rewrite(ConstantScoreAutoRewrite.java:95)
at 
org.apache.lucene.search.MultiTermQuery$ConstantScoreAutoRewrite.rewrite(MultiTermQuery.java:220)
at org.apache.lucene.search.MultiTermQuery.rewrite(MultiTermQuery.java:286)
at org.apache.lucene.search.BooleanQuery.rewrite(BooleanQuery.java:429)
at org.apache.lucene.search.IndexSearcher.rewrite(IndexSearcher.java:616)
at 
org.apache.lucene.search.IndexSearcher.createNormalizedWeight(IndexSearcher.java:663)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:281)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:269)
{code}

  was:
MultiFieldQueryParser doesnt catch invalid syntax properly (due to user using 
regexpression syntax unwittingly)
 
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.util.Version;
import org.junit.Test;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;

/**
 * Lucene tests
 */
public class LuceneRegExParseTest
{

    @Test
    public void testSearch411LuceneBugReport() throws Exception
    {
        Exception e = null;
        try
        {
            String[] fields = new String[2];
            fields[0] = "artist";
            fields[1] = "recording";

            QueryParser qp = new MultiFieldQueryParser(Version.LUCENE_41, 
fields, new StandardAnalyzer(Version.LUCENE_41));
            qp.parse("artist:pandora /reyli  recording:yo/Alguien");
        }
        catch(Exception ex)
        {
            e=ex;
        }
        assertNotNull(e);
        assertTrue(e instanceof ParseException );
    }
}

With assertions disabled this test fails as no exception is thrown.
With assertions enabled we get

java.lang.AssertionError
        at 
org.apache.lucene.search.MultiTermQuery.<init>(MultiTermQuery.java:252)
        at 
org.apache.lucene.search.AutomatonQuery.<init>(AutomatonQuery.java:65)
        at org.apache.lucene.search.RegexpQuery.<init>(RegexpQuery.java:90)
        at org.apache.lucene.search.RegexpQuery.<init>(RegexpQuery.java:79)
        at org.apache.lucene.search.RegexpQuery.<init>(RegexpQuery.java:69)
        at 
org.apache.lucene.queryparser.classic.QueryParserBase.newRegexpQuery(QueryParserBase.java:790)
        at 
org.apache.lucene.queryparser.classic.QueryParserBase.getRegexpQuery(QueryParserBase.java:1005)
        at 
org.apache.lucene.queryparser.classic.QueryParserBase.handleBareTokenQuery(QueryParserBase.java:1075)
        at 
org.apache.lucene.queryparser.classic.QueryParser.Term(QueryParser.java:359)
        at 
org.apache.lucene.queryparser.classic.QueryParser.Clause(QueryParser.java:258)
        at 
org.apache.lucene.queryparser.classic.QueryParser.Query(QueryParser.java:213)
        at 
org.apache.lucene.queryparser.classic.QueryParser.TopLevelQuery(QueryParser.java:171)
        at 
org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:120)
        at 
org.musicbrainz.search.servlet.LuceneRegExParseTest.testSearch411LuceneBugReport(LuceneRegExParseTest.java:30)

but this should throw an exception without assertions enabled. Because no 
exception is thrown a search then faikls with the following stack trace

java.lang.NullPointerException
at java.util.TreeMap.getEntry(TreeMap.java:342)
at java.util.TreeMap.get(TreeMap.java:273)
at 
org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsReader.terms(PerFieldPostingsFormat.java:215)
at 
org.apache.lucene.search.TermCollectingRewrite.collectTerms(TermCollectingRewrite.java:58)
at 
org.apache.lucene.search.ConstantScoreAutoRewrite.rewrite(ConstantScoreAutoRewrite.java:95)
at 
org.apache.lucene.search.MultiTermQuery$ConstantScoreAutoRewrite.rewrite(MultiTermQuery.java:220)
at org.apache.lucene.search.MultiTermQuery.rewrite(MultiTermQuery.java:286)
at org.apache.lucene.search.BooleanQuery.rewrite(BooleanQuery.java:429)
at org.apache.lucene.search.IndexSearcher.rewrite(IndexSearcher.java:616)
at 
org.apache.lucene.search.IndexSearcher.createNormalizedWeight(IndexSearcher.java:663)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:281)
at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:269)


> MultiFieldQueryParser doesnt catch invalid syntax properly (due to user using 
> regexpression syntax unwittingly)
> ---------------------------------------------------------------------------------------------------------------
>
>                 Key: LUCENE-6347
>                 URL: https://issues.apache.org/jira/browse/LUCENE-6347
>             Project: Lucene - Core
>          Issue Type: Bug
>          Components: core/queryparser
>    Affects Versions: 4.1
>            Reporter: Paul taylor
>
> MultiFieldQueryParser doesnt catch invalid syntax properly (due to user using 
> regexpression syntax unwittingly)
> {code} 
> import org.apache.lucene.analysis.standard.StandardAnalyzer;
> import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
> import org.apache.lucene.queryparser.classic.ParseException;
> import org.apache.lucene.queryparser.classic.QueryParser;
> import org.apache.lucene.util.Version;
> import org.junit.Test;
> import static org.junit.Assert.assertNotNull;
> import static org.junit.Assert.assertTrue;
> /**
>  * Lucene tests
>  */
> public class LuceneRegExParseTest
> {
>     @Test
>     public void testSearch411LuceneBugReport() throws Exception
>     {
>         Exception e = null;
>         try
>         {
>             String[] fields = new String[2];
>             fields[0] = "artist";
>             fields[1] = "recording";
>             QueryParser qp = new MultiFieldQueryParser(Version.LUCENE_41, 
> fields, new StandardAnalyzer(Version.LUCENE_41));
>             qp.parse("artist:pandora /reyli  recording:yo/Alguien");
>         }
>         catch(Exception ex)
>         {
>             e=ex;
>         }
>         assertNotNull(e);
>         assertTrue(e instanceof ParseException );
>     }
> }
> {code}
> With assertions disabled this test fails as no exception is thrown.
> With assertions enabled we get
> {code}
> java.lang.AssertionError
>       at 
> org.apache.lucene.search.MultiTermQuery.<init>(MultiTermQuery.java:252)
>       at 
> org.apache.lucene.search.AutomatonQuery.<init>(AutomatonQuery.java:65)
>       at org.apache.lucene.search.RegexpQuery.<init>(RegexpQuery.java:90)
>       at org.apache.lucene.search.RegexpQuery.<init>(RegexpQuery.java:79)
>       at org.apache.lucene.search.RegexpQuery.<init>(RegexpQuery.java:69)
>       at 
> org.apache.lucene.queryparser.classic.QueryParserBase.newRegexpQuery(QueryParserBase.java:790)
>       at 
> org.apache.lucene.queryparser.classic.QueryParserBase.getRegexpQuery(QueryParserBase.java:1005)
>       at 
> org.apache.lucene.queryparser.classic.QueryParserBase.handleBareTokenQuery(QueryParserBase.java:1075)
>       at 
> org.apache.lucene.queryparser.classic.QueryParser.Term(QueryParser.java:359)
>       at 
> org.apache.lucene.queryparser.classic.QueryParser.Clause(QueryParser.java:258)
>       at 
> org.apache.lucene.queryparser.classic.QueryParser.Query(QueryParser.java:213)
>       at 
> org.apache.lucene.queryparser.classic.QueryParser.TopLevelQuery(QueryParser.java:171)
>       at 
> org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:120)
>       at 
> org.musicbrainz.search.servlet.LuceneRegExParseTest.testSearch411LuceneBugReport(LuceneRegExParseTest.java:30)
> but this should throw an exception without assertions enabled. Because no 
> exception is thrown a search then faikls with the following stack trace
> java.lang.NullPointerException
> at java.util.TreeMap.getEntry(TreeMap.java:342)
> at java.util.TreeMap.get(TreeMap.java:273)
> at 
> org.apache.lucene.codecs.perfield.PerFieldPostingsFormat$FieldsReader.terms(PerFieldPostingsFormat.java:215)
> at 
> org.apache.lucene.search.TermCollectingRewrite.collectTerms(TermCollectingRewrite.java:58)
> at 
> org.apache.lucene.search.ConstantScoreAutoRewrite.rewrite(ConstantScoreAutoRewrite.java:95)
> at 
> org.apache.lucene.search.MultiTermQuery$ConstantScoreAutoRewrite.rewrite(MultiTermQuery.java:220)
> at org.apache.lucene.search.MultiTermQuery.rewrite(MultiTermQuery.java:286)
> at org.apache.lucene.search.BooleanQuery.rewrite(BooleanQuery.java:429)
> at org.apache.lucene.search.IndexSearcher.rewrite(IndexSearcher.java:616)
> at 
> org.apache.lucene.search.IndexSearcher.createNormalizedWeight(IndexSearcher.java:663)
> at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:281)
> at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:269)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to