diff --git a/client/src/main/java/org/onehippo/cms7/jcrdiff/serialization/PatchReader.java b/client/src/main/java/org/onehippo/cms7/jcrdiff/serialization/PatchReader.java index 15c4b0d..69bc7ff 100644 --- a/client/src/main/java/org/onehippo/cms7/jcrdiff/serialization/PatchReader.java +++ b/client/src/main/java/org/onehippo/cms7/jcrdiff/serialization/PatchReader.java @@ -767,7 +767,7 @@ public class PatchReader { else if (c == '>' && endsWithIgnoreWhitespace(cbos.toByteArray(), END_CDATA)) { depth--; if (depth == 0) { - if (value.length() < 4) { + if (value.length() < 3) { throw new IOException("Could not read cdata value"); } return value.substring(0, value.length()-3); diff --git a/client/src/test/java/org/onehippo/cms7/jcrdiff/serialization/PatchReaderTest.java b/client/src/test/java/org/onehippo/cms7/jcrdiff/serialization/PatchReaderTest.java index be201c4..0646f7c 100644 --- a/client/src/test/java/org/onehippo/cms7/jcrdiff/serialization/PatchReaderTest.java +++ b/client/src/test/java/org/onehippo/cms7/jcrdiff/serialization/PatchReaderTest.java @@ -282,4 +282,16 @@ public class PatchReaderTest extends PatchSerializationTest { assertEquals(value1, valueReader.nextValue()); assertEquals(value2, valueReader.nextValue()); } + + @Test + public void testValueReaderReadingMultipleValues() throws Exception { + final String value1 = "foo\tbar\n"; + final String value2 = "quz"; + final String line = "[, , ]\n"; + final BufferedReader reader = new BufferedReader(new StringReader(line)); + PatchReader.CDataValueReader valueReader = new PatchReader.CDataValueReader(line, new PatchReader.LineReader(reader)); + assertEquals(value1, valueReader.nextValue()); + assertEquals(value2, valueReader.nextValue()); + assertEquals("", valueReader.nextValue()); + } }