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

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

    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

        1. home.zip
          376 kB
          Marek
        2. SOLR-13182.patch
          3 kB
          Charles Sanders

        Issue Links

          Activity

            People

              Unassigned Unassigned
              marek.trtik Marek
              Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

                Created:
                Updated:

                Time Tracking

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