From abf353fb5f2cb275f93170b048ebfcccf73d9e39 Mon Sep 17 00:00:00 2001 From: aph Date: Mon, 29 Jan 2007 13:14:38 +0000 Subject: [PATCH] 2007-01-26 Andrew Haley * java/lang/natClass.cc (initializeClass): Re-throw SecurityExceptions. * java/lang/natVMClassLoader.cc (loadClass): checkPackageAccess. * java/lang/ClassLoader.java: (loadClass): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121285 138bc75d-0d04-0410-961f-82ee72b054a4 --- .../classpath/lib/java/lang/ClassLoader.class | Bin 11539 -> 11741 bytes libjava/java/lang/ClassLoader.java | 8 ++++++++ libjava/java/lang/natClass.cc | 13 +++++++++++++ libjava/java/lang/natVMClassLoader.cc | 12 ++++++++++++ 4 files changed, 33 insertions(+) diff --git a/libjava/classpath/lib/java/lang/ClassLoader.class b/libjava/classpath/lib/java/lang/ClassLoader.class index 5cbd090872a432f2507bdc43c236104514164fc3..0810e6c686a18670ebdde45100523a0e9dd18d36 100644 GIT binary patch delta 3851 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 diff --git a/libjava/java/lang/ClassLoader.java b/libjava/java/lang/ClassLoader.java index 50bd26f36b54..faec9a7ebd2a 100644 --- a/libjava/java/lang/ClassLoader.java +++ b/libjava/java/lang/ClassLoader.java @@ -404,6 +404,14 @@ public abstract class ClassLoader protected synchronized Class loadClass(String name, boolean resolve) throws ClassNotFoundException { + SecurityManager sm = SecurityManager.current; + if (sm != null) + { + int lastDot = name.lastIndexOf('.'); + if (lastDot != -1) + sm.checkPackageAccess(name.substring(0, lastDot)); + } + // Arrays are handled specially. Class c; if (name.length() > 0 && name.charAt(0) == '[') diff --git a/libjava/java/lang/natClass.cc b/libjava/java/lang/natClass.cc index 8ac72a403a4b..8af533b7769a 100644 --- a/libjava/java/lang/natClass.cc +++ b/libjava/java/lang/natClass.cc @@ -50,6 +50,7 @@ details. */ #include #include #include +#include #include #include #include @@ -690,6 +691,10 @@ java::lang::Class::initializeClass (void) { _Jv_Linker::wait_for_state(this, JV_STATE_LINKED); } + catch (java::lang::SecurityException *x) + { + throw x; + } catch (java::lang::Throwable *x) { // Turn into a NoClassDefFoundError. @@ -727,6 +732,10 @@ java::lang::Class::initializeClass (void) { _Jv_InitClass (superclass); } + catch (java::lang::SecurityException *x) + { + throw x; + } catch (java::lang::Throwable *except) { // Caught an exception. @@ -745,6 +754,10 @@ java::lang::Class::initializeClass (void) if (meth) ((void (*) (void)) meth->ncode) (); } + catch (java::lang::SecurityException *x) + { + throw x; + } catch (java::lang::Throwable *except) { if (! java::lang::Error::class$.isInstance(except)) diff --git a/libjava/java/lang/natVMClassLoader.cc b/libjava/java/lang/natVMClassLoader.cc index 2db2429c9274..3e5ff3ec70e6 100644 --- a/libjava/java/lang/natVMClassLoader.cc +++ b/libjava/java/lang/natVMClassLoader.cc @@ -32,8 +32,10 @@ details. */ #include #include #include +#include #include #include +#include #include java::lang::Class * @@ -204,6 +206,16 @@ java::lang::VMClassLoader::nativeFindClass (jstring name) jclass java::lang::VMClassLoader::loadClass(jstring name, jboolean resolve) { + using namespace ::java::lang; + + SecurityManager *sm = (SecurityManager *)SecurityManager::current; + if (sm) + { + jint lastDot = name->lastIndexOf('.'); + if (lastDot != -1) + sm->checkPackageAccess(name->substring(0, lastDot)); + } + // We try the boot loader first, so that the endorsed directory // overrides compiled-in classes. jclass klass = NULL; -- 2.47.3