[
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)