Created a test called NullCallerGetResource to test Module::getResourceAsStream 
and Class::getResourceAsStream from the native level.

At the java level the test builds a test module called 'n' which opens the 
package 'open' to everyone. There is also a package 'closed' which is neither 
opened or exported. Both packages have a text file called 'test.txt'. The open 
package has a class called OpenResources and the closed package has a class 
called ClosedResources. The native test is launched with the test module n 
added.

At the native level the test tries to read both the open and closed resource 
from both the classes and the module. It performs the equivalent of the 
following java operations:

Class c = open.OpenResources.fetchClass();
InputStream in = c.getResourceAsStream("test.txt");
assert(in != null); in.close();

Module n = c.getModule();
in = n.getResourceAsStream("open/test.txt");
assert(in != null); in.close();

Class closed = closed.ClosedResources.fetchClass();
assert(closedsStream("test.txt") == null);
assert(n.getResourceAsStream("closed/test.txt") == null);

The test initially threw an NPE when trying to fetch the open resource. The 
Module class was fixed by removing the fragment with the (caller == null) test 
in getResourceAsStream, and changing the call to isOpen(String,Module) to use 
EVERYONE_MODULE if the caller module is null.

-------------

Commit messages:
 - JDK-8281006 Module::getResourceAsStream should check if the resource is open 
unconditionally when caller is null

Changes: https://git.openjdk.java.net/jdk/pull/8134/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=8134&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8281006
  Stats: 397 lines in 7 files changed: 391 ins; 5 del; 1 mod
  Patch: https://git.openjdk.java.net/jdk/pull/8134.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/8134/head:pull/8134

PR: https://git.openjdk.java.net/jdk/pull/8134

Reply via email to