Mercurial > hg > icedtea10
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);