[ https://issues.apache.org/jira/browse/OAK-3395?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14745542#comment-14745542 ]
Thomas Mueller commented on OAK-3395: ------------------------------------- I would add randomized tests, for example: {noformat} EscapeUtilsTest: @Test public void randomized() throws Exception { Random r = new Random(1); for (int i = 0; i < 100000; i++) { int len = r.nextInt(10); StringBuilder buff = new StringBuilder(); for (int j = 0; j < len; j++) { switch (r.nextInt(3)) { case 0: String s = "\\\r\nrnRN "; buff.append(s.charAt(r.nextInt(s.length()))); break; case 1: buff.append((char) r.nextInt(300)); break; case 2: buff.append((char) r.nextInt(65000)); break; } } String original = buff.toString(); String escaped = EscapeUtils.escapeLineBreak(original); String unescaped = EscapeUtils.unescapeLineBreaks(escaped); assertTrue(escaped.indexOf('\n') < 0); assertTrue(escaped.indexOf('\r') < 0); assertEquals(original, unescaped); } } {noformat} > RevisionGC fails for JCR paths having line feed characters > ---------------------------------------------------------- > > Key: OAK-3395 > URL: https://issues.apache.org/jira/browse/OAK-3395 > Project: Jackrabbit Oak > Issue Type: Bug > Components: mongomk, rdbmk > Reporter: Chetan Mehrotra > Assignee: Chetan Mehrotra > Priority: Minor > Fix For: 1.3.7, 1.2.6, 1.0.21 > > Attachments: OAK-3395-1.patch > > > RevisionGC fails with error while processing any id (derived from JCR path) > having line feed or carriage return char > This happens because it relies on Oak Commons StringSort and ExternalSort > which works with line delimited string and having an id with line break would > break this sorting logic. Error reported is like > {noformat} > java.lang.AssertionError: Invalid id /1442211320 > at > org.apache.jackrabbit.oak.plugins.document.util.Utils.getDepthFromId(Utils.java:337) > at > org.apache.jackrabbit.oak.plugins.document.NodeDocumentIdComparator.compare(NodeDocumentIdComparator.java:38) > at > org.apache.jackrabbit.oak.plugins.document.NodeDocumentIdComparator.compare(NodeDocumentIdComparator.java:30) > at java.util.TimSort.countRunAndMakeAscending(TimSort.java:324) > at java.util.TimSort.sort(TimSort.java:203) > at java.util.TimSort.sort(TimSort.java:173) > at java.util.Arrays.sort(Arrays.java:659) > at java.util.Collections.sort(Collections.java:217) > at > org.apache.jackrabbit.oak.commons.sort.ExternalSort.sortAndSave(ExternalSort.java:279) > at > org.apache.jackrabbit.oak.commons.sort.ExternalSort.sortInBatch(ExternalSort.java:218) > at > org.apache.jackrabbit.oak.commons.sort.ExternalSort.sortInBatch(ExternalSort.java:257) > at > org.apache.jackrabbit.oak.commons.sort.StringSort$PersistentState.sort(StringSort.java:191) > at > org.apache.jackrabbit.oak.commons.sort.StringSort.sort(StringSort.java:88) > at > org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector$DeletedDocsGC.ensureSorted(VersionGarbageCollector.java:383) > at > org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector$DeletedDocsGC.getDocIdsToDelete(VersionGarbageCollector.java:274) > at > org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector$DeletedDocsGC.removeDeletedDocuments(VersionGarbageCollector.java:296) > at > org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector$DeletedDocsGC.removeDocuments(VersionGarbageCollector.java:241) > at > org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector.collectDeletedDocuments(VersionGarbageCollector.java:154) > at > org.apache.jackrabbit.oak.plugins.document.VersionGarbageCollector.gc(VersionGarbageCollector.java:105) > at > org.apache.jackrabbit.oak.plugins.document.VersionGCDeletionTest.gcWithPathsHavingNewLine(VersionGCDeletionTest.java:203) > {noformat} -- This message was sent by Atlassian JIRA (v6.3.4#6332)