Index: lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/DefaultPassageFormatter.java =================================================================== --- lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/DefaultPassageFormatter.java (Revision 1513074) +++ lucene/highlighter/src/java/org/apache/lucene/search/postingshighlight/DefaultPassageFormatter.java (Arbeitskopie) @@ -61,6 +61,7 @@ public String format(Passage passages[], String content) { StringBuilder sb = new StringBuilder(); int pos = 0; + int maxLength = content.length(); for (Passage passage : passages) { // don't add ellipsis if its the first one, or if its connected. if (passage.startOffset > pos && pos > 0) { @@ -69,7 +70,7 @@ pos = passage.startOffset; for (int i = 0; i < passage.numMatches; i++) { int start = passage.matchStarts[i]; - int end = passage.matchEnds[i]; + int end = Math.min(passage.matchEnds[i], maxLength); // its possible to have overlapping terms if (start > pos) { append(sb, content, pos, start); @@ -81,8 +82,10 @@ pos = end; } } - // its possible a "term" from the analyzer could span a sentence boundary. - append(sb, content, pos, Math.max(pos, passage.endOffset)); + if(pos < maxLength){ + // its possible a "term" from the analyzer could span a sentence boundary. + append(sb, content, pos, Math.max(pos, Math.min(passage.endOffset, maxLength))); + } pos = passage.endOffset; } return sb.toString(); Index: lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestDefaultPassageFormater.java =================================================================== --- lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestDefaultPassageFormater.java (Revision 0) +++ lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestDefaultPassageFormater.java (Arbeitskopie) @@ -0,0 +1,30 @@ +package org.apache.lucene.search.postingshighlight; + + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class TestDefaultPassageFormater { + + @Test + public void testFormatWithMatchExceedingContentLength() { + + final String content = "1234567890"; + final int start = 5; + final int end = 15; + final Passage passage = new Passage(); + passage.numMatches = 1; + passage.startOffset = 0; + passage.endOffset = 15; + passage.matchStarts = new int[] {start}; + passage.matchEnds = new int[] {end}; + final Passage[] passages = new Passage[] {passage}; + + final DefaultPassageFormatter formatter = new DefaultPassageFormatter(); + + String formattedString = formatter.format(passages, content); + + assertEquals("1234567890", formattedString); + } +} Index: lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestDefaultPassageFormater.java =================================================================== --- lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestDefaultPassageFormater.java (Revision 0) +++ lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestDefaultPassageFormater.java (Arbeitskopie) Eigenschaftsänderungen: lucene/highlighter/src/test/org/apache/lucene/search/postingshighlight/TestDefaultPassageFormater.java ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +LastChangedDate LastChangedRevision LastChangedBy Id \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property