Skip to content

Commit c60bf63

Browse files
committed
Refactoring reference resolving
1 parent cc6c705 commit c60bf63

3 files changed

Lines changed: 15 additions & 6 deletions

File tree

src/main/java/org/apache/xml/security/stax/impl/resourceResolvers/ResolverFilesystem.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.apache.xml.security.stax.ext.ResourceResolver;
2626
import org.apache.xml.security.stax.ext.ResourceResolverLookup;
2727
import org.apache.xml.security.stax.ext.stax.XMLSecStartElement;
28+
import org.apache.xml.security.utils.resolver.ResolverUtils;
2829

2930
/**
3031
* Resolver for local filesystem resources. Use the standard java security-manager to
@@ -49,7 +50,11 @@ public ResourceResolverLookup canResolve(String uri, String baseURI) {
4950
if (uri == null) {
5051
return null;
5152
}
52-
if (uri.startsWith("file:") || baseURI != null && baseURI.startsWith("file:")) {
53+
// At least one of uri or baseURI must start with "file:", and
54+
// neither may carry a different explicit scheme (e.g. http:, https:, ftp:).
55+
if ((uri.startsWith("file:") || baseURI != null && baseURI.startsWith("file:"))
56+
&& !ResolverUtils.hasExplicitNonFileScheme(uri)
57+
&& !ResolverUtils.hasExplicitNonFileScheme(baseURI)) {
5358
return this;
5459
}
5560
return null;

src/main/java/org/apache/xml/security/utils/resolver/ResourceResolverContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,11 @@ public boolean isURISafeToResolve() {
6262
return true;
6363
}
6464
if (uriToResolve != null) {
65-
if (uriToResolve.startsWith("file:") || uriToResolve.startsWith("http:")) {
65+
if (uriToResolve.startsWith("file:") || ResolverUtils.hasExplicitNonFileScheme(uriToResolve)) {
6666
return false;
6767
}
6868
if (!uriToResolve.isEmpty() && uriToResolve.charAt(0) != '#' &&
69-
baseUri != null && (baseUri.startsWith("file:") || baseUri.startsWith("http:"))) {
69+
baseUri != null && (baseUri.startsWith("file:") || ResolverUtils.hasExplicitNonFileScheme(baseUri))) {
7070
return false;
7171
}
7272
}

src/main/java/org/apache/xml/security/utils/resolver/implementations/ResolverLocalFilesystem.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.apache.xml.security.utils.resolver.ResourceResolverContext;
3030
import org.apache.xml.security.utils.resolver.ResourceResolverException;
3131
import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
32+
import org.apache.xml.security.utils.resolver.ResolverUtils;
3233

3334
/**
3435
* A simple ResourceResolver for requests into the local filesystem.
@@ -64,15 +65,18 @@ public boolean engineCanResolveURI(ResourceResolverContext context) {
6465
return false;
6566
}
6667

67-
if (context.uriToResolve.isEmpty() || context.uriToResolve.charAt(0) == '#' ||
68-
context.uriToResolve.startsWith("http:")) {
68+
if (context.uriToResolve.isEmpty() || context.uriToResolve.charAt(0) == '#') {
6969
return false;
7070
}
7171

7272
try {
7373
LOG.log(Level.DEBUG, "I was asked whether I can resolve {0}", context.uriToResolve);
7474

75-
if (context.uriToResolve.startsWith("file:") || context.baseUri.startsWith("file:")) {
75+
// At least one of uriToResolve or baseUri must start with "file:", and
76+
// neither may carry a different explicit scheme (e.g. http:, https:, ftp:).
77+
if ((context.uriToResolve.startsWith("file:") || context.baseUri.startsWith("file:"))
78+
&& !ResolverUtils.hasExplicitNonFileScheme(context.uriToResolve)
79+
&& !ResolverUtils.hasExplicitNonFileScheme(context.baseUri)) {
7680
LOG.log(Level.DEBUG, "I state that I can resolve {0}", context.uriToResolve);
7781
return true;
7882
}

0 commit comments

Comments
 (0)