Index: src/main/java/org/apache/jackrabbit/core/query/lucene/DefaultHighlighter.java =================================================================== --- src/main/java/org/apache/jackrabbit/core/query/lucene/DefaultHighlighter.java (revision 798806) +++ src/main/java/org/apache/jackrabbit/core/query/lucene/DefaultHighlighter.java (working copy) @@ -379,16 +379,18 @@ int min = excerpt.length(); char[] buf = new char[maxLength]; int len = reader.read(buf); - excerpt.append(buf, 0, len); + StringBuffer tmp = new StringBuffer(); + tmp.append(buf, 0, len); if (len == buf.length) { - for (int i = excerpt.length() - 1; i > min; i--) { - if (Character.isWhitespace(excerpt.charAt(i))) { - excerpt.delete(i, excerpt.length()); - excerpt.append(" ..."); + for (int i = tmp.length() - 1; i > min; i--) { + if (Character.isWhitespace(tmp.charAt(i))) { + tmp.delete(i, tmp.length()); + tmp.append(" ..."); break; } } } + excerpt.append(Text.encodeIllegalXMLCharacters(tmp.toString())); excerpt.append(fragmentEnd).append(excerptEnd); return excerpt.toString(); } Index: src/test/java/org/apache/jackrabbit/core/query/ExcerptTest.java =================================================================== --- src/test/java/org/apache/jackrabbit/core/query/ExcerptTest.java (revision 798806) +++ src/test/java/org/apache/jackrabbit/core/query/ExcerptTest.java (working copy) @@ -104,6 +104,21 @@ "apache jackrabbit"); } + public void testEncodeIllegalCharsNoHighlights() throws RepositoryException { + String text = "bla bla bla"; + String excerpt = createExcerpt("bla <strong>bla</strong> bla"); + Node n = testRootNode.addNode(nodeName1); + n.setProperty("text", text); + n.setProperty("other", "foo"); + superuser.save(); + + String stmt = getStatement("foo"); + QueryResult result = executeQuery(stmt); + RowIterator rows = result.getRows(); + assertEquals(1, rows.getSize()); + assertEquals(excerpt, rows.nextRow().getValue("rep:excerpt(text)").getString()); + } + private void checkExcerpt(String text, String fragmentText, String terms) throws RepositoryException { String excerpt = createExcerpt(fragmentText);