Skip to content

Commit 4098c3a

Browse files
Hardened jcr query traversal limit
1 parent 5f03742 commit 4098c3a

3 files changed

Lines changed: 31 additions & 23 deletions

File tree

core/src/main/java/dev/vml/es/acm/core/repo/Repo.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package dev.vml.es.acm.core.repo;
22

3-
import dev.vml.es.acm.core.util.StreamUtils;
3+
import dev.vml.es.acm.core.util.JcrUtils;
44
import java.util.stream.Stream;
55
import javax.jcr.Node;
66
import javax.jcr.RepositoryException;
@@ -177,15 +177,13 @@ public Stream<RepoResource> queryRaw(String sql) {
177177
Query query = queryManager.createQuery(sql, Query.JCR_SQL2);
178178
QueryResult result = query.execute();
179179

180-
return StreamUtils.asNodeStream(result.getNodes()).map(n -> {
180+
return JcrUtils.asNodeStream(result.getNodes()).map(n -> {
181181
try {
182182
return new RepoResource(this, n.getPath());
183183
} catch (RepositoryException e) {
184184
throw new RepoException("Cannot read node path from query result!", e);
185185
}
186186
});
187-
} catch (RepoException e) {
188-
throw e;
189187
} catch (Exception e) {
190188
throw new RepoException(String.format("Cannot execute raw query '%s'!", sql), e);
191189
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package dev.vml.es.acm.core.util;
2+
3+
import java.util.Iterator;
4+
import java.util.stream.Stream;
5+
import javax.jcr.Node;
6+
import javax.jcr.NodeIterator;
7+
8+
public class JcrUtils {
9+
10+
public static Stream<Node> asNodeStream(NodeIterator nodeIterator) {
11+
if (nodeIterator == null) {
12+
return Stream.empty();
13+
}
14+
return StreamUtils.asStream(new Iterator<Node>() {
15+
@Override
16+
public boolean hasNext() {
17+
return nodeIterator.hasNext();
18+
}
19+
20+
@Override
21+
public Node next() {
22+
return nodeIterator.nextNode();
23+
}
24+
});
25+
}
26+
}

core/src/main/java/dev/vml/es/acm/core/util/StreamUtils.java

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
import java.util.Iterator;
55
import java.util.stream.Stream;
66
import java.util.stream.StreamSupport;
7-
import javax.jcr.Node;
8-
import javax.jcr.NodeIterator;
97

108
public class StreamUtils {
119

@@ -14,6 +12,9 @@ public static <T> Stream<T> asStream(Iterator<T> sourceIterator) {
1412
}
1513

1614
public static <T> Stream<T> asStream(Iterator<T> sourceIterator, boolean parallel) {
15+
if (sourceIterator == null) {
16+
return Stream.empty();
17+
}
1718
Iterable<T> iterable = () -> sourceIterator;
1819
return StreamSupport.stream(iterable.spliterator(), parallel);
1920
}
@@ -34,21 +35,4 @@ public T next() {
3435
}
3536
});
3637
}
37-
38-
public static Stream<Node> asNodeStream(NodeIterator nodeIterator) {
39-
if (nodeIterator == null) {
40-
return Stream.empty();
41-
}
42-
return asStream(new Iterator<Node>() {
43-
@Override
44-
public boolean hasNext() {
45-
return nodeIterator.hasNext();
46-
}
47-
48-
@Override
49-
public Node next() {
50-
return nodeIterator.nextNode();
51-
}
52-
});
53-
}
5438
}

0 commit comments

Comments
 (0)