Description
When parsing a sub query in a function query, FunctionQParser#parseValueSource does not check if the produced query object is null. When it is, it just wraps a null in a QueryValueSource object. This is a cause for NPE's in code consuming that object. Parsed queries can be null, for example when the query string only contains stopwords, so we need handle that condition.
Steps to reproduce the issue
- Start solr with the techproducts example collection: solr start -e techproducts
- Add a stopword to SOLR_DIR/example/techproducts/solr/techproducts/conf/stopwords.txt, for example "at"
- Reload the core
- Execute a function query:
http://localhost:8983/solr/techproducts/select?fieldquery={!field%20f=features%20v=%27%22at%22%27}&q={!func}%20if($fieldquery,1,0)
The following stacktrace is produced:
2020-12-03 13:35:38.868 INFO (qtp2095677157-21) [ x:techproducts] o.a.s.c.S.Request [techproducts] webapp=/solr path=/select params={q={!func}+if($fieldquery,1,0)&fieldquery={!field+f%3Dfeatures+v%3D'"at"'}} status=500 QTime=34 2020-12-03 13:35:38.872 ERROR (qtp2095677157-21) [ x:techproducts] o.a.s.s.HttpSolrCall null:java.lang.NullPointerException at org.apache.lucene.queries.function.valuesource.QueryValueSource.hashCode(QueryValueSource.java:63) at org.apache.lucene.queries.function.valuesource.IfFunction.hashCode(IfFunction.java:129) at org.apache.lucene.queries.function.FunctionQuery.hashCode(FunctionQuery.java:176) at org.apache.solr.search.QueryResultKey.<init>(QueryResultKey.java:53) at org.apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher.java:1341) at org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher.java:580)
Attachments
Issue Links
- links to