[kaffe] Should IllegalAccessException be thrown or not?
Ito Kazumitsu
kaz at maczuka.gcd.org
Sun Dec 11 23:55:04 PST 2005
From: Ito Kazumitsu <kaz at maczuka.gcd.org>
Date: Mon, 12 Dec 2005 15:21:26 +0900 (JST)
> But I am afraid
>
> 266 else if( (target->name->data[0] != '[') &&
> 267 same_package &&
> 268 (target->this_inner_index >= 0) )
> 269 {
> 270 slot_acc = 1;
> 271 }
>
> will make something private in the target class T accessible to
> the caller C if T and C are in the same package and T is a nested
> class.
How about this patch?
--- kaffe/kaffevm/access.c.orig Fri Aug 19 15:00:41 2005
+++ kaffe/kaffevm/access.c Mon Dec 12 16:37:15 2005
@@ -153,6 +153,45 @@
}
}
+/*
+ * Returns 1 if oc is an outer class of c
+ */
+static
+int outerof (Hjava_lang_Class *c, Hjava_lang_Class *oc)
+{
+ innerClass *ic;
+ Hjava_lang_Class *outer;
+ errorInfo einfo;
+
+ outer = NULL;
+ if( c->this_inner_index >= 0 )
+ {
+ ic = &c->inner_classes[c->this_inner_index];
+ if( ic->outer_class )
+ {
+ outer = getClass(ic->outer_class, c, &einfo);
+ if( outer == NULL )
+ {
+ discardErrorInfo(&einfo);
+ }
+ }
+ }
+ if ( outer != NULL )
+ {
+ if ( oc == outer)
+ {
+ return 1;
+ }
+ else
+ {
+ return outerof(outer, oc);
+ }
+ }
+ else {
+ return 0;
+ }
+}
+
int checkAccess(struct Hjava_lang_Class *context,
struct Hjava_lang_Class *target,
accessFlags target_flags)
@@ -236,6 +275,14 @@
}
}
+ else if ( outerof(target, context) )
+ {
+ /* target is within the context. */
+ class_acc = 1;
+ slot_acc = 1;
+
+ return 1;
+ }
if((context->packageLength == target->packageLength) &&
!strncmp(context->name->data,
@@ -263,12 +310,17 @@
/* Package. */
slot_acc = 1;
}
+/*
+ Commented out because private members get accessible to
+ any context in the same package if target is a nested class.
+
else if( (target->name->data[0] != '[') &&
same_package &&
(target->this_inner_index >= 0) )
{
slot_acc = 1;
}
+*/
else if( context->this_inner_index >= 0 )
{
innerClass *ic;
More information about the kaffe
mailing list