changeset 2548:d1b536142970

PR2335: CACAO lacks JVM_FindClassFromCaller 2014-10-29 Andrew John Hughes <gnu.andrew@redhat.com> * Makefile.am: (ICEDTEA_PATCHES): Add new patch for CACAO builds. * NEWS: Updated. * patches/cacao/pr2032.patch: Implement JVM_FindClassFromCaller as same as JVM_FindClassFromClassLoader for now.
author Andrew John Hughes <gnu_andrew@member.fsf.org>
date Wed, 06 May 2015 21:20:05 +0100
parents 1c77e4c99219
children 597cc3d8fb28
files ChangeLog Makefile.am NEWS patches/cacao/pr2032.patch
diffstat 4 files changed, 88 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed May 06 06:12:27 2015 +0100
+++ b/ChangeLog	Wed May 06 21:20:05 2015 +0100
@@ -1,3 +1,13 @@
+2014-10-29  Andrew John Hughes  <gnu.andrew@redhat.com>
+
+	* Makefile.am:
+	(ICEDTEA_PATCHES): Add new patch for CACAO
+	builds.
+	* NEWS: Updated.
+	* patches/cacao/pr2032.patch:
+	Implement JVM_FindClassFromCaller as same
+	as JVM_FindClassFromClassLoader for now.
+
 2012-06-12  Andrew John Hughes  <gnu_andrew@member.fsf.org>
 
 	PR2331: IcedTea8 fails to build with IcedTea7
--- a/Makefile.am	Wed May 06 06:12:27 2015 +0100
+++ b/Makefile.am	Wed May 06 21:20:05 2015 +0100
@@ -224,7 +224,8 @@
 ICEDTEA_PATCHES += \
 	patches/cacao/launcher.patch \
 	patches/cacao/memory.patch \
-	patches/cacao/armhf.patch
+	patches/cacao/armhf.patch \
+	patches/cacao/pr2032.patch
 else
 if USING_CACAO
 ICEDTEA_PATCHES += \
--- a/NEWS	Wed May 06 06:12:27 2015 +0100
+++ b/NEWS	Wed May 06 21:20:05 2015 +0100
@@ -94,6 +94,7 @@
   - PR1279: Synchronise CACAO versions between IcedTea6/7/8 where possible
   - CA172, PR2330, G453612: Add ARM hardfloat support to CACAO on Gentoo
   - PR2331: IcedTea8 fails to build with IcedTea7 CACAO due to low max heap size
+  - PR2335: CACAO lacks JVM_FindClassFromCaller introduced by security patch in 2.5.3
 
 New in release 2.0 (2011-XX-XX):
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/cacao/pr2032.patch	Wed May 06 21:20:05 2015 +0100
@@ -0,0 +1,75 @@
+# HG changeset patch
+# User Xerxes RĂ„nby <xerxes@gudinna.com>
+# Date 1414362363 -3600
+# Node ID ec6bd33b3e927738d1353e6e639e76f74d55635f
+# Parent  ea3c9a40d975430d1e9dcb598bf25b4bd7aec4ca
+OpenJDK: Implement JVM_FindClassFromCaller
+
+8015256: Better class accessibility
+Summary: Improve protection domain check in forName()
+
+* contrib/mapfile-vers-product: Export said function.
+* src/native/vm/openjdk/jvm.cpp (JVM_FindClassFromCaller): Implement it.
+
+diff --git a/contrib/mapfile-vers-product b/contrib/mapfile-vers-product
+--- cacao/cacao/contrib/mapfile-vers-product
++++ cacao/cacao/contrib/mapfile-vers-product
+@@ -87,6 +87,7 @@
+                 JVM_Exit;
+                 JVM_FillInStackTrace;
+                 JVM_FindClassFromBootLoader;
++                JVM_FindClassFromCaller;
+                 JVM_FindClassFromClass;
+                 JVM_FindClassFromClassLoader;
+                 JVM_FindLibraryEntry;
+--- cacao/cacao/src/native/vm/openjdk/jvm.cpp.orig	2014-10-29 16:40:30.732305204 +0000
++++ cacao/cacao/src/native/vm/openjdk/jvm.cpp	2014-10-29 16:44:06.643292016 +0000
+@@ -684,6 +684,48 @@
+ }
+ 
+ 
++/* JVM_FindClassFromCaller
++ * Find a class from a given class loader.  Throws ClassNotFoundException.
++ *  name:   name of class
++ *  init:   whether initialization is done
++ *  loader: class loader to look up the class.
++ *          This may not be the same as the caller's class loader.
++ *  caller: initiating class. The initiating class may be null when a security
++ *          manager is not installed.
++ *
++ * Find a class with this name in this loader,
++ * using the caller's "protection domain".
++ */
++
++jclass JVM_FindClassFromCaller(JNIEnv* env, const char* name, jboolean init, jobject loader, jclass caller)
++{
++	classinfo     *c;
++	utf           *u;
++	classloader_t *cl;
++
++	TRACEJVMCALLS(("JVM_FindClassFromCaller(name=%s, init=%d, loader=%p, caller=%p)", name, init, loader, caller));
++
++	u  = utf_new_char(name);
++	cl = loader_hashtable_classloader_add((java_handle_t *) loader);
++
++	/* XXX The caller's protection domain should be used during
++	   the load_class_from_classloader but there is no specification or
++	   unit-test in OpenJDK documenting the desired effect */
++
++	c = load_class_from_classloader(u, cl);
++
++	if (c == NULL)
++		return NULL;
++
++	if (init)
++		if (!(c->state & CLASS_INITIALIZED))
++			if (!initialize_class(c))
++				return NULL;
++
++	return (jclass) LLNI_classinfo_wrap(c);
++}
++
++
+ /* JVM_FindClassFromClassLoader */
+ 
+ jclass JVM_FindClassFromClassLoader(JNIEnv* env, const char* name, jboolean init, jobject loader, jboolean throwError)