Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: access.c 7976 2007-05-29 12:22:55Z twisti $
+ $Id: access.c 8237 2007-07-27 16:15:29Z twisti $
*/
assert(referer);
assert(cls);
- /* public classes are always accessible */
+ /* Public classes are always accessible. */
if (cls->flags & ACC_PUBLIC)
return true;
- /* a class in the same package is always accessible */
+ /* A class in the same package is always accessible. */
if (SAME_PACKAGE(referer, cls))
return true;
- /* a non-public class in another package is not accessible */
+#if defined(WITH_CLASSPATH_SUN)
+ /* Code for Sun's OpenJDK (see
+ hotspot/src/share/vm/runtime/reflection.cpp
+ (Reflection::verify_class_access)): Allow all accesses from
+ sun/reflect/MagicAccessorImpl subclasses to succeed
+ trivially. */
+
+ /* NOTE: This check must be before checks that could return
+ false. */
+
+ if (class_issubclass(cls, class_sun_reflect_MagicAccessorImpl))
+ return true;
+#endif
+
+ /* A non-public class in another package is not accessible. */
return false;
}
{
assert(referer);
assert(declarer);
-
- /* public members are accessible */
+
+ /* Public members are accessible. */
if (memberflags & ACC_PUBLIC)
return true;
+#if defined(WITH_CLASSPATH_SUN)
+ /* Code for Sun's OpenJDK (see
+ hotspot/src/share/vm/runtime/reflection.cpp
+ (Reflection::verify_class_access)): Allow all accesses from
+ sun/reflect/MagicAccessorImpl subclasses to succeed
+ trivially. */
+
+ /* NOTE: This check must be before checks that could return
+ false. */
+
+ if (class_issubclass(declarer, class_sun_reflect_MagicAccessorImpl))
+ return true;
+#endif
+
/* {declarer is not an interface} */
/* private members are only accessible by the class itself */
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: class.c 8231 2007-07-25 14:21:24Z twisti $
+ $Id: class.c 8237 2007-07-27 16:15:29Z twisti $
*/
classinfo *class_java_lang_VMThread;
classinfo *class_java_io_Serializable;
+#if defined(WITH_CLASSPATH_SUN)
+classinfo *class_sun_reflect_MagicAccessorImpl;
+#endif
/* system exception classes required in cacao */
bool class_issubclass(classinfo *sub, classinfo *super)
{
- for (;;) {
- if (!sub)
- return false;
-
+ for (; sub != NULL; sub = class_get_superclass(sub))
if (sub == super)
return true;
- sub = sub->super.cls;
- }
+ return false;
}
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: class.h 8231 2007-07-25 14:21:24Z twisti $
+ $Id: class.h 8237 2007-07-27 16:15:29Z twisti $
*/
extern classinfo *class_java_lang_VMThread;
extern classinfo *class_java_io_Serializable;
+#if defined(WITH_CLASSPATH_SUN)
+extern classinfo *class_sun_reflect_MagicAccessorImpl;
+#endif
/* system exception classes required in cacao */
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: linker.c 8234 2007-07-26 08:21:25Z twisti $
+ $Id: linker.c 8237 2007-07-27 16:15:29Z twisti $
*/
return false;
#endif
-
/* link classes for wrapping primitive types */
#if defined(ENABLE_JAVASE)
if (!link_class(class_java_util_Vector))
return false;
+# if defined(WITH_CLASSPATH_SUN)
+ if (!link_class(class_sun_reflect_MagicAccessorImpl))
+ return false;
+# endif
+
if (!link_class(arrayclass_java_lang_Object))
return false;
#endif
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: loader.c 8230 2007-07-25 08:23:10Z twisti $
+ $Id: loader.c 8237 2007-07-27 16:15:29Z twisti $
*/
if (!(class_java_util_Vector = load_class_bootstrap(utf_java_util_Vector)))
return false;
+# if defined(WITH_CLASSPATH_SUN)
+ if (!(class_sun_reflect_MagicAccessorImpl =
+ load_class_bootstrap(utf_new_char("sun/reflect/MagicAccessorImpl"))))
+ return false;
+# endif
+
if (!(arrayclass_java_lang_Object =
load_class_bootstrap(utf_new_char("[Ljava/lang/Object;"))))
return false;