Issues running JAXP jtreg tests ("java.lang.RuntimePermission" "accessDeclaredMembers")
Joe Wang
huizhe.wang at oracle.com
Tue Nov 22 19:08:26 UTC 2016
Daniel, you're awesome! This could have potentially been a frustration
to anyone with a newer testng, as Christoph and Volker have experienced.
This issue really needs to be fixed immediately :-)
Joe
On 11/22/16, 7:58 AM, Daniel Fuchs wrote:
> On 22/11/16 14:51, Langer, Christoph wrote:
>> In that case, if we can't change testng, maybe the jaxp
>> SecurityManager can allow testng to access the declared members
>> without granting this to the testee code?
>
> That's what I was prototyping.
> The patch below seem to fix the issue - but it's a bit ugly.
> (note I just tested it with XSLTFunctionsTest - you need to
> rm -r JT* after applying to the jaxp repo)
>
> It might be less ugly if we had a system property set
> by jtreg to point at <jtreg>/lib - as we could use that
> to predict the code source location - but I don't think
> we do.
>
> -- daniel
>
> diff --git
> a/test/javax/xml/jaxp/libs/jaxp/library/JAXPPolicyManager.java
> b/test/javax/xml/jaxp/libs/jaxp/library/JAXPPolicyManager.java
> --- a/test/javax/xml/jaxp/libs/jaxp/library/JAXPPolicyManager.java
> +++ b/test/javax/xml/jaxp/libs/jaxp/library/JAXPPolicyManager.java
> @@ -23,6 +23,7 @@
> package jaxp.library;
>
>
> +import java.net.URL;
> import java.security.CodeSource;
> import java.security.Permission;
> import java.security.PermissionCollection;
> @@ -34,6 +35,7 @@
> import java.util.HashMap;
> import java.util.Map;
> import java.util.PropertyPermission;
> +import java.util.Set;
> import java.util.StringJoiner;
>
>
> @@ -163,6 +165,8 @@
> * JAXP concrete classes.
> */
> class TestPolicy extends Policy {
> + private final static Set<String> TEST_JARS =
> + Set.of("jtreg.jar", "javatest.jar", "testng.jar");
> private final PermissionCollection permissions = new Permissions();
>
> private ThreadLocal<Map<Integer, Permission>>
> transientPermissions = new ThreadLocal<>();
> @@ -221,9 +225,30 @@
>
> if (permissions.implies(perm))
> return true;
> - else
> + else {
> + boolean before = allowAll();
> + String path = null;
> + try {
> + CodeSource cs = (domain == null) ? null :
> domain.getCodeSource();
> + URL loc = (cs == null) ? null : cs.getLocation();
> + path = (loc == null) ? null : loc.getPath();
> + } finally {
> + setAllowAll(before);
> + }
> + if (path != null && TEST_JARS.stream()
> + .filter(path::endsWith)
> + .findAny()
> + .isPresent()) {
> + return true;
> + } else {
> return tmpImplies(perm);
> }
> + }
> + }
> +
> +
> +
>
> /*
> * Add a temporary permission in current thread context. This
> won't impact
>
More information about the core-libs-dev
mailing list