8177311: Denied access when named module accesses unreferences package from the unnamed module

Ensure access to the unnamed module is allowed if the given module reads the unnamed module.

Reviewed-by: jjg
This commit is contained in:
Jan Lahoda 2017-03-29 10:27:23 +02:00
parent 96c6439d7c
commit dc292b699a
2 changed files with 42 additions and 2 deletions

View File

@ -334,7 +334,10 @@ public class Resolve {
currModule.complete();
PackageSymbol p = c.packge();
isAccessible =
(currModule == p.modle) || currModule.visiblePackages.get(p.fullname) == p || p == syms.rootPackage;
currModule == p.modle ||
currModule.visiblePackages.get(p.fullname) == p ||
p == syms.rootPackage ||
(p.modle == syms.unnamedModule && currModule.readModules.contains(p.modle));
} else {
isAccessible = true;
}

View File

@ -23,7 +23,7 @@
/*
* @test
* @bug 8154283 8167320 8171098 8172809 8173068 8173117 8176045
* @bug 8154283 8167320 8171098 8172809 8173068 8173117 8176045 8177311
* @summary tests for multi-module mode compilation
* @library /tools/lib
* @modules
@ -958,4 +958,41 @@ public class EdgeCases extends ModuleTestBase {
throw new Exception("expected output not found: " + log);
}
@Test
public void testDependOnUnnamedAccessibility(Path base) throws Exception {
Path unnamedSrc = base.resolve("unnamed-src");
tb.writeJavaFiles(unnamedSrc,
"package p1; public class First { public static p2.Second get() { return null; } }",
"package p2; public class Second { public void test() { } }");
Path unnamedClasses = base.resolve("unnamed-classes");
tb.createDirectories(unnamedClasses);
System.err.println("compiling unnamed sources:");
new JavacTask(tb)
.outdir(unnamedClasses)
.files(findJavaFiles(unnamedSrc))
.run()
.writeAll();
//test sources:
Path src = base.resolve("src");
Path m = src.resolve("m");
tb.writeJavaFiles(m,
"module m { }",
"package p; public class Test { { p1.First.get().test(); } }");
Path classes = base.resolve("classes");
tb.createDirectories(classes);
System.err.println("compiling test module:");
new JavacTask(tb)
.options("-classpath", unnamedClasses.toString(),
"--add-reads", "m=ALL-UNNAMED")
.outdir(classes)
.files(findJavaFiles(src))
.run()
.writeAll();
}
}