Merging of compressed string Fields may hit NPE
-----------------------------------------------

                 Key: LUCENE-1374
                 URL: https://issues.apache.org/jira/browse/LUCENE-1374
             Project: Lucene - Java
          Issue Type: Bug
          Components: Index
    Affects Versions: 2.4
            Reporter: Michael McCandless
            Assignee: Michael McCandless
             Fix For: 2.4


This bug was introduced with LUCENE-1219 (only present on 2.4).

The bug happens when merging compressed string fields, but only if bulk-merging 
code does not apply because the FieldInfos for the segment being merged are not 
congruent.  This test shows the bug:

{code}
  public void testMergeCompressedFields() throws IOException {
    File indexDir = new File(System.getProperty("tempDir"), 
"mergecompressedfields");
    Directory dir = FSDirectory.getDirectory(indexDir);
    try {
      for(int i=0;i<5;i++) {
        // Must make a new writer & doc each time, w/
        // different fields, so bulk merge of stored fields
        // cannot run:
        IndexWriter w = new IndexWriter(dir, new WhitespaceAnalyzer(), i==0, 
IndexWriter.MaxFieldLength.UNLIMITED);
        w.setMergeFactor(5);
        w.setMergeScheduler(new SerialMergeScheduler());
        Document doc = new Document();
        doc.add(new Field("test1", "this is some data that will be compressed 
this this this", Field.Store.COMPRESS, Field.Index.NO));
        doc.add(new Field("test2", new byte[20], Field.Store.COMPRESS));
        doc.add(new Field("field" + i, "random field", Field.Store.NO, 
Field.Index.TOKENIZED));
        w.addDocument(doc);
        w.close();
      }

      byte[] cmp = new byte[20];

      IndexReader r = IndexReader.open(dir);
      for(int i=0;i<5;i++) {
        Document doc = r.document(i);
        assertEquals("this is some data that will be compressed this this 
this", doc.getField("test1").stringValue());
        byte[] b = doc.getField("test2").binaryValue();
        assertTrue(Arrays.equals(b, cmp));
      }
    } finally {
      dir.close();
      _TestUtil.rmDir(indexDir);
    }
  }
{code}

It's because in FieldsReader, when we load a field "for merge" we create a 
FieldForMerge instance which subsequently does not return the right values for 
getBinary{Value,Length,Offset}.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to