Index: lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestDirectoryTaxonomyWriter.java =================================================================== --- lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestDirectoryTaxonomyWriter.java (revision 1490938) +++ lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestDirectoryTaxonomyWriter.java (working copy) @@ -17,11 +17,12 @@ import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; +import org.apache.lucene.index.IndexWriterConfig.OpenMode; import org.apache.lucene.index.IndexWriterConfig; -import org.apache.lucene.index.IndexWriterConfig.OpenMode; import org.apache.lucene.index.SegmentInfos; import org.apache.lucene.store.AlreadyClosedException; import org.apache.lucene.store.Directory; +import org.apache.lucene.util._TestUtil; import org.junit.Test; /* @@ -412,5 +413,34 @@ taxoWriter.close(); dir.close(); } - + + @Test + public void testHugeLabel() throws Exception { + Directory dir = newDirectory(); + DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(dir); + + // Add one huge label: + while (true) { + String s = _TestUtil.randomRealisticUnicodeString(random(), 32767, 32767); + if (s.indexOf('\u001f') != -1) { + continue; + } + taxoWriter.addCategory(new CategoryPath("dimdimdim", s)); + break; + } + + // Then lots of tiny ones: + for(int i=0;i<10000;i++) { + String s = _TestUtil.randomUnicodeString(random()); + if (s.length() == 0) { + continue; + } + if (s.indexOf('\u001f') != -1) { + continue; + } + taxoWriter.addCategory(new CategoryPath("dim", s)); + } + taxoWriter.close(); + dir.close(); + } }