# HG changeset patch # User Jaroslav Tulach # Date 1358238731 -3600 # Node ID 086c60adf08e2b3ca023fba3d6728c581c4f0a19 # Parent 84e6b97c468ca649faf55be1e09f621550a0feab Detect attempts to get a class for invalid array signature diff -r 84e6b97c468c -r 086c60adf08e emul/src/main/java/java/lang/Class.java --- a/emul/src/main/java/java/lang/Class.java Tue Jan 15 09:23:46 2013 +0100 +++ b/emul/src/main/java/java/lang/Class.java Tue Jan 15 09:32:11 2013 +0100 @@ -147,7 +147,12 @@ public static Class forName(String className) throws ClassNotFoundException { if (className.startsWith("[")) { - return defineArray(className); + Class arrType = defineArray(className); + Class c = arrType; + while (c != null && c.isArray()) { + c = c.getComponentType0(); // verify component type is sane + } + return arrType; } Class c = loadCls(className, className.replace('.', '_')); if (c == null) { diff -r 84e6b97c468c -r 086c60adf08e vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java --- a/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java Tue Jan 15 09:23:46 2013 +0100 +++ b/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java Tue Jan 15 09:32:11 2013 +0100 @@ -21,6 +21,8 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; import org.apidesign.bck2brwsr.core.JavaScriptBody; import org.apidesign.bck2brwsr.vmtest.Compare; import org.apidesign.bck2brwsr.vmtest.VMTest; @@ -118,6 +120,22 @@ @Compare public String classForByte() throws Exception { return Class.forName("[Z").getName(); } + + @Compare public String classForUnknownArray() { + try { + return Class.forName("[W").getName(); + } catch (Exception ex) { + return ex.getClass().getName(); + } + } + + @Compare public String classForUnknownDeepArray() { + try { + return Class.forName("[[[[[W").getName(); + } catch (Exception ex) { + return ex.getClass().getName(); + } + } @Compare public String componentGetNameForObjectArray() { return (new Object[3]).getClass().getComponentType().getName();