diff options
author | Jiri Vanek <[email protected]> | 2012-08-27 12:50:29 +0200 |
---|---|---|
committer | Jiri Vanek <[email protected]> | 2012-08-27 12:50:29 +0200 |
commit | 36f7aeda80f29c9969099feb064985e1920518e9 (patch) | |
tree | adc072b80c019c3d6dcb051870d6e7b452b9726a /netx | |
parent | afffc63223a2307b01ec50c6ec4da839a88144f5 (diff) |
Fixed long term failing unit-test, fixed NPE from ClassLoader
* netx/net/sourceforge/jnlp/NullJnlpFileException.java: new class to
distinguish plain NPE from null jnlp file.
* netx/net/sourceforge/jnlp/SecurityDesc.java: (getSandBoxPermissions)
added throw of NullJnlpFileException in case of null jnlp file.
* netx/net/sourceforge/jnlp/runtime/JNLPClassLoader.java: (findClass)
added Override annotation, add catch of NullJnlpFileException and
re-throw of CNF exception.
* tests/netx/unit/net/sourceforge/jnlp/runtime/CodeBaseClassLoaderTest.java:
(testResourceLoadSuccessCaching) (testResourceLoadFailureCaching)
(testParentClassLoaderIsAskedForClasses) - internal JNLPFile's
(getSecurity) null in SecurityDesc constructorrepalced by this.
(testNullFileSecurityDesc) new test to ensure NPE in null JNLPFile case.
Diffstat (limited to 'netx')
-rw-r--r-- | netx/net/sourceforge/jnlp/NullJnlpFileException.java | 22 | ||||
-rw-r--r-- | netx/net/sourceforge/jnlp/SecurityDesc.java | 14 | ||||
-rw-r--r-- | netx/net/sourceforge/jnlp/runtime/JNLPClassLoader.java | 11 |
3 files changed, 41 insertions, 6 deletions
diff --git a/netx/net/sourceforge/jnlp/NullJnlpFileException.java b/netx/net/sourceforge/jnlp/NullJnlpFileException.java new file mode 100644 index 0000000..9c67f61 --- /dev/null +++ b/netx/net/sourceforge/jnlp/NullJnlpFileException.java @@ -0,0 +1,22 @@ +package net.sourceforge.jnlp; + +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +/** + * + * @author jvanek + */ +public class NullJnlpFileException extends NullPointerException { + + public NullJnlpFileException() { + super(); + } + + public NullJnlpFileException(String s) { + super(s); + } + +} diff --git a/netx/net/sourceforge/jnlp/SecurityDesc.java b/netx/net/sourceforge/jnlp/SecurityDesc.java index 197fd3d..927917a 100644 --- a/netx/net/sourceforge/jnlp/SecurityDesc.java +++ b/netx/net/sourceforge/jnlp/SecurityDesc.java @@ -233,10 +233,16 @@ public class SecurityDesc { if (grantAwtPermissions) { permissions.add(new AWTPermission("showWindowWithoutWarningBanner")); } - - if (file.isApplication()) - for (int i = 0; i < jnlpRIAPermissions.length; i++) - permissions.add(jnlpRIAPermissions[i]); + if (JNLPRuntime.isWebstartApplication()) { + if (file == null) { + throw new NullJnlpFileException("Can not return sandbox permissions, file is null"); + } + if (file.isApplication()) { + for (int i = 0; i < jnlpRIAPermissions.length; i++) { + permissions.add(jnlpRIAPermissions[i]); + } + } + } if (downloadHost != null && downloadHost.length() > 0) permissions.add(new SocketPermission(downloadHost, diff --git a/netx/net/sourceforge/jnlp/runtime/JNLPClassLoader.java b/netx/net/sourceforge/jnlp/runtime/JNLPClassLoader.java index 5ec2e70..c30bc48 100644 --- a/netx/net/sourceforge/jnlp/runtime/JNLPClassLoader.java +++ b/netx/net/sourceforge/jnlp/runtime/JNLPClassLoader.java @@ -69,6 +69,7 @@ import net.sourceforge.jnlp.JNLPMatcher; import net.sourceforge.jnlp.JNLPMatcherException; import net.sourceforge.jnlp.LaunchDesc; import net.sourceforge.jnlp.LaunchException; +import net.sourceforge.jnlp.NullJnlpFileException; import net.sourceforge.jnlp.ParseException; import net.sourceforge.jnlp.PluginBridge; import net.sourceforge.jnlp.ResourcesDesc; @@ -1701,6 +1702,7 @@ public class JNLPClassLoader extends URLClassLoader { /** * Find the class in this loader or any of its extension loaders. */ + @Override protected Class findClass(String name) throws ClassNotFoundException { for (int i = 0; i < loaders.length; i++) { try { @@ -1718,6 +1720,8 @@ public class JNLPClassLoader extends URLClassLoader { } catch (ClassNotFoundException ex) { } catch (ClassFormatError cfe) { } catch (PrivilegedActionException pae) { + } catch (NullJnlpFileException ex) { + throw new ClassNotFoundException(this.mainClass + " in main classloader ", ex); } } @@ -2233,7 +2237,10 @@ public class JNLPClassLoader extends URLClassLoader { }, parentJNLPClassLoader.getAccessControlContextForClassLoading()); } catch (PrivilegedActionException pae) { notFoundResources.put(name, super.getURLs()); - throw new ClassNotFoundException("Could not find class " + name); + throw new ClassNotFoundException("Could not find class " + name, pae); + } catch (NullJnlpFileException njf) { + notFoundResources.put(name, super.getURLs()); + throw new ClassNotFoundException("Could not find class " + name, njf); } } @@ -2297,7 +2304,7 @@ public class JNLPClassLoader extends URLClassLoader { } }, parentJNLPClassLoader.getAccessControlContextForClassLoading()); } catch (PrivilegedActionException pae) { - } + } if (url == null) { notFoundResources.put(name, super.getURLs()); |