changeset 2549:597cc3d8fb28

PR2336: JamVM lacks JVM_FindClassFromCaller 2015-01-07 Andrew John Hughes <gnu.andrew@member.fsf.org> PR2336: JamVM lacks JVM_FindClassFromCaller * Makefile.am: (ICEDTEA_PATCHES): Add new patch when building JamVM. (EXTRA_DIST): Include patches from JamVM directory. * NEWS: Updated. * patches/jamvm/find_class_from_caller.patch: Backport JamVM patch to implement FindClassFromCaller.
author Andrew John Hughes <gnu_andrew@member.fsf.org>
date Wed, 06 May 2015 22:27:53 +0100
parents d1b536142970
children 12df15a72296
files ChangeLog Makefile.am NEWS patches/jamvm/find_class_from_caller.patch
diffstat 4 files changed, 115 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed May 06 21:20:05 2015 +0100
+++ b/ChangeLog	Wed May 06 22:27:53 2015 +0100
@@ -1,5 +1,17 @@
-2014-10-29  Andrew John Hughes  <gnu.andrew@redhat.com>
-
+2015-01-07  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+
+	PR2336: JamVM lacks JVM_FindClassFromCaller
+	* Makefile.am:
+	(ICEDTEA_PATCHES): Add new patch when building
+	JamVM.
+	(EXTRA_DIST): Include patches from JamVM directory.
+	* NEWS: Updated.
+	* patches/jamvm/find_class_from_caller.patch:
+	Backport JamVM patch to implement FindClassFromCaller.
+
+2014-10-29  Andrew John Hughes  <gnu_andrew@member.fsf.org>
+
+	PR2335: CACAO lacks JVM_FindClassFromCaller
 	* Makefile.am:
 	(ICEDTEA_PATCHES): Add new patch for CACAO
 	builds.
--- a/Makefile.am	Wed May 06 21:20:05 2015 +0100
+++ b/Makefile.am	Wed May 06 22:27:53 2015 +0100
@@ -247,6 +247,11 @@
 ICEDTEA_PATCHES += patches/systemtap-gcc-4.5.patch
 endif
 
+if BUILD_JAMVM
+ICEDTEA_PATCHES += \
+	patches/jamvm/find_class_from_caller.patch
+endif
+
 if ENABLE_NSS
 ICEDTEA_PATCHES += patches/nss-config.patch
 else
@@ -489,6 +494,7 @@
 
 EXTRA_DIST = $(top_srcdir)/patches/*.patch \
 	$(top_srcdir)/patches/cacao/*.patch \
+	$(top_srcdir)/patches/jamvm/*.patch \
 	tools-copy contrib overlays \
 	javaws.png javaws.desktop \
 	jconsole.desktop policytool.desktop \
--- a/NEWS	Wed May 06 21:20:05 2015 +0100
+++ b/NEWS	Wed May 06 22:27:53 2015 +0100
@@ -89,12 +89,13 @@
   - JSR 292: correct intrinsic cache COMPARE function
   - Race condition in setting up imethod table
   - GC: Minor performance improvement
+  - PR2336: JamVM lacks JVM_FindClassFromCaller
 * CACAO
   - PR1277: Synchronise CACAO rules between IcedTea6/7/8 where possible
   - 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
+  - PR2335: CACAO lacks JVM_FindClassFromCaller
 
 New in release 2.0 (2011-XX-XX):
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/jamvm/find_class_from_caller.patch	Wed May 06 22:27:53 2015 +0100
@@ -0,0 +1,93 @@
+diff -Nru jamvm.old/src/classlib/openjdk/class.c jamvm/src/classlib/openjdk/class.c
+--- jamvm/jamvm.old/src/classlib/openjdk/class.c	2013-11-18 03:45:44.000000000 +0000
++++ jamvm/jamvm/src/classlib/openjdk/class.c	2015-01-07 16:14:57.599311159 +0000
+@@ -23,6 +23,7 @@
+ #include "jam.h"
+ #include "hash.h"
+ #include "class.h"
++#include "excep.h"
+ #include "symbol.h"
+ 
+ /* Cached offset of classes field in java.lang.ClassLoader objects */
+@@ -161,3 +162,24 @@
+ 
+     return strcat(strcpy(endorsed_dirs, java_home), "/lib/endorsed");
+ }
++
++Class *findClassFromLoader(char *name, int init, Object *loader,
++                           int throw_error) {
++
++    Class *class = findClassFromClassLoader(name, loader);
++
++    if(class == NULL) {
++        if(!throw_error) {
++            Object *excep = exceptionOccurred();
++            char *dot_name = slash2DotsDup(name);
++
++            clearException();
++            signalChainedException(java_lang_ClassNotFoundException,
++                                   dot_name, excep);
++            sysFree(dot_name);
++        }
++    } else if(init)
++        initClass(class);
++
++    return class;
++}
+diff -Nru jamvm.old/src/classlib/openjdk/jvm.c jamvm/src/classlib/openjdk/jvm.c
+--- jamvm/jamvm.old/src/classlib/openjdk/jvm.c	2013-11-18 03:45:44.000000000 +0000
++++ jamvm/jamvm/src/classlib/openjdk/jvm.c	2015-01-07 16:16:43.560605105 +0000
+@@ -520,26 +520,22 @@
+ jclass JVM_FindClassFromClassLoader(JNIEnv *env, const char *name,
+                                     jboolean init, jobject loader,
+                                     jboolean throw_error) {
+-    Class *class;
+ 
+     TRACE("JVM_FindClassFromClassLoader(env=%p, name=%s, init=%d, loader=%p,"
+           " throwError=%d)", env, name, init, loader, throwError);
+ 
+-    class = findClassFromClassLoader((char *)name, loader);
++    return findClassFromLoader((char *)name, init, loader, throw_error);
++}
++
++/* JVM_FindClassFromCaller */
++
++jclass JVM_FindClassFromCaller(JNIEnv *env, const char *name, jboolean init,
++                               jobject loader, jclass caller) {
+ 
+-    if(class == NULL && !throw_error) {
+-        Object *excep = exceptionOccurred();
+-        char *dot_name = slash2DotsDup((char*)name);
+-
+-        clearException();
+-        signalChainedException(java_lang_ClassNotFoundException,
+-                               dot_name, excep);
+-        sysFree(dot_name);
+-    } else
+-        if(init)
+-            initClass(class);
++    TRACE("JVM_FindClassFromCaller(env=%p, name=%s, init=%d, loader=%p,"
++          " caller=%p)", env, name, init, loader, caller);
+ 
+-    return class;
++    return findClassFromLoader((char *)name, init, loader, FALSE);
+ }
+ 
+ 
+diff -Nru jamvm.old/src/classlib/openjdk/openjdk.h jamvm/src/classlib/openjdk/openjdk.h
+--- jamvm/jamvm.old/src/classlib/openjdk/openjdk.h	2013-11-18 03:45:44.000000000 +0000
++++ jamvm/jamvm/src/classlib/openjdk/openjdk.h	2015-01-07 16:14:57.599311159 +0000
+@@ -1,5 +1,5 @@
+ /*
+- * Copyright (C) 2010, 2011, 2013 Robert Lougher <rob@jamvm.org.uk>.
++ * Copyright (C) 2010, 2011, 2013, 2014 Robert Lougher <rob@jamvm.org.uk>.
+  *
+  * This file is part of JamVM.
+  *
+@@ -53,3 +53,6 @@
+ extern Object *resolveMemberName(Class *mh_class, Object *mname);
+ 
+ extern Object *getMethodParameters(Object *method);
++
++extern Class *findClassFromLoader(char *name, int init, Object *loader,
++                                  int throw_error);