Uploaded image for project: 'Solr'
  1. Solr
  2. SOLR-13182

NullPointerException due to an invariant violation in org/apache/lucene/search/BooleanClause.java[60]

Attach filesAttach ScreenshotAdd voteVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Patch Available
    • Minor
    • Resolution: Unresolved
    • 9.0
    • None
    • None

    Description

      Requesting the following URL causes Solr to return an HTTP 500 error response:

      http://localhost:8983/solr/films/select?q={!child%20q={}
      

      The error response seems to be caused by the following uncaught exception:

      ERROR (qtp689401025-14) [ x:films] o.a.s.h.RequestHandlerBase java.lang.NullPointerException: Query must not be null
       at java.util.Objects.requireNonNull(Objects.java:228)
       at org.apache.lucene.search.BooleanClause.<init>(BooleanClause.java:60)
       at org.apache.lucene.search.BooleanQuery$Builder.add(BooleanQuery.java:127)
       at org.apache.solr.search.join.BlockJoinChildQParser.noClausesQuery(BlockJoinChildQParser.java:50)
       at org.apache.solr.search.join.FiltersQParser.parse(FiltersQParser.java:60)
       at org.apache.solr.search.QParser.getQuery(QParser.java:173)
       at org.apache.solr.handler.component.QueryComponent.prepare(QueryComponent.java:158)
       at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:272)
       at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:199)
       at org.apache.solr.core.SolrCore.execute(SolrCore.java:2559)
       at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:711)
       at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:516)
       at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:394)
       at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:340)
      
      [...]
      

      In org/apache/solr/search/join/BlockJoinChildQParser.java[47] there is
      computed query variable 'parents', which receives value null from call to
      'parseParentFilter()'. The null value is then passed to
      'org.apache.lucene.search.BooleanQuery.Builder.add' method at line 50. That
      method calls the constructor where 'Objects.requireNonNull' failes
      (the exception is thrown).

      The call to 'parseParentFilter()' evaluates to null, because:

      1. In org/apache/solr/search/join/BlockJoinParentQParser.java[59] null is
           set to string 'filter' (becase "which" is not in 'localParams' map).
      2. The parser 'parentParser' obtained in the next line has member 'qstr' set
           to null, because the 'filter' passed to 'subQuery' is passed as the first
           argument to 'org.apache.solr.search.QParserPlugin.createParser'.
      3. Subsequnt call to 'org.apache.solr.search.QParser.getQuery' on the
           'parentParser' at org/apache/solr/search/join/BlockJoinParentQParser.java[61]
           leads to retuning null in 'org.apache.solr.search.LuceneQParser.parse',
           because the queried string 'qstr' is the empty string.

      --------------------------------------
      We found this bug using Diffblue Microservices Testing. Find more information on this fuzz testing campaign.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            marek.trtik Marek

            Dates

              Created:
              Updated:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 2h 20m
                2h 20m

                Slack

                  Issue deployment