Uploaded image for project: 'Lucene - Core'
  1. Lucene - Core
  2. LUCENE-3779

An incomplete fix for the NPE bugs in MultipleTermPositions.java

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Critical
    • Resolution: Abandoned
    • 3.0
    • None
    • core/index
    • None
    • New

    Description

      The fix revision 219387 (Fix for NPE (bug #35626). Fix by Hans Hjelm, test case by Scotty Allen.) was aimed to remove an NPE bug on the return value of "_termPositionsQueue.peek()" in the method "skipTo" of the file "/lucene/java/trunk/src/java/org/apache/lucene/index/MultipleTermPositions.java" , but it is incomplete.
      Since the returned value "_termPositionsQueue.peek()" could be null during the run-time execution, its value should also be null-checked before being dereferenced in other methods.

      The buggy code locations the same fix needs to be applied at are as bellows:

      Line 118, 124, 135 of the method "next()" :

      public final boolean next() throws IOException {
      if (_termPositionsQueue.size() == 0)
      return false;

      _posList.clear();
      [Line 118] _doc = _termPositionsQueue.peek().doc();

      TermPositions tp;
      do {
      tp = _termPositionsQueue.peek();

      [Line 124] for (int i = 0; i < tp.freq(); i++)

      { // NOTE: this can result in dup positions being added! _posList.add(tp.nextPosition()); }

      if (tp.next())
      _termPositionsQueue.updateTop();
      else

      { _termPositionsQueue.pop(); tp.close(); }

      [Line 135] } while (_termPositionsQueue.size() > 0 && _termPositionsQueue.peek().doc() == _doc);

      _posList.sort();
      _freq = _posList.size();

      return true;

      }

      Attachments

        Activity

          People

            Unassigned Unassigned
            guangtai Guangtai Liang
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

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