From e3fe9099a2329c3ed380ac38a426944fda79aed8 Mon Sep 17 00:00:00 2001 From: Joel Dice Date: Mon, 22 Apr 2013 21:20:21 -0600 Subject: [PATCH] filter InnerClasses attribute for relevant classes in JVM_GetDeclaredClasses The InnerClasses attribute may have entries for classes declared inside classes we don't care about, so we must check each entry's outer class reference and make sure it matches the one we do care about. --- src/classpath-openjdk.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/classpath-openjdk.cpp b/src/classpath-openjdk.cpp index 1a70816295..56f8526fcc 100644 --- a/src/classpath-openjdk.cpp +++ b/src/classpath-openjdk.cpp @@ -4448,7 +4448,10 @@ jvmGetDeclaredClasses(Thread* t, uintptr_t* arguments) unsigned count = 0; for (unsigned i = 0; i < arrayLength(t, table); ++i) { - if (innerClassReferenceOuter(t, arrayBody(t, table, i))) { + object outer = innerClassReferenceOuter(t, arrayBody(t, table, i)); + if (outer and byteArrayEqual + (t, outer, className(t, jclassVmClass(t, *c)))) + { ++ count; } } @@ -4457,7 +4460,10 @@ jvmGetDeclaredClasses(Thread* t, uintptr_t* arguments) PROTECT(t, result); for (unsigned i = 0; i < arrayLength(t, table); ++i) { - if (innerClassReferenceOuter(t, arrayBody(t, table, i))) { + object outer = innerClassReferenceOuter(t, arrayBody(t, table, i)); + if (outer and byteArrayEqual + (t, outer, className(t, jclassVmClass(t, *c)))) + { object inner = getJClass (t, resolveClass (t, classLoader(t, jclassVmClass(t, *c)),