Detect attempts to get a class for invalid array signature arrays
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Tue, 15 Jan 2013 09:32:11 +0100
brancharrays
changeset 452086c60adf08e
parent 451 84e6b97c468c
child 453 5aca91d00356
Detect attempts to get a class for invalid array signature
emul/src/main/java/java/lang/Class.java
vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java
     1.1 --- a/emul/src/main/java/java/lang/Class.java	Tue Jan 15 09:23:46 2013 +0100
     1.2 +++ b/emul/src/main/java/java/lang/Class.java	Tue Jan 15 09:32:11 2013 +0100
     1.3 @@ -147,7 +147,12 @@
     1.4      public static Class<?> forName(String className)
     1.5      throws ClassNotFoundException {
     1.6          if (className.startsWith("[")) {
     1.7 -            return defineArray(className);
     1.8 +            Class<?> arrType = defineArray(className);
     1.9 +            Class<?> c = arrType;
    1.10 +            while (c != null && c.isArray()) {
    1.11 +                c = c.getComponentType0(); // verify component type is sane
    1.12 +            }
    1.13 +            return arrType;
    1.14          }
    1.15          Class<?> c = loadCls(className, className.replace('.', '_'));
    1.16          if (c == null) {
     2.1 --- a/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java	Tue Jan 15 09:23:46 2013 +0100
     2.2 +++ b/vmtest/src/test/java/org/apidesign/bck2brwsr/tck/ReflectionTest.java	Tue Jan 15 09:32:11 2013 +0100
     2.3 @@ -21,6 +21,8 @@
     2.4  import java.util.Arrays;
     2.5  import java.util.Collections;
     2.6  import java.util.List;
     2.7 +import java.util.logging.Level;
     2.8 +import java.util.logging.Logger;
     2.9  import org.apidesign.bck2brwsr.core.JavaScriptBody;
    2.10  import org.apidesign.bck2brwsr.vmtest.Compare;
    2.11  import org.apidesign.bck2brwsr.vmtest.VMTest;
    2.12 @@ -118,6 +120,22 @@
    2.13      @Compare public String classForByte() throws Exception {
    2.14          return Class.forName("[Z").getName();
    2.15      }
    2.16 +
    2.17 +    @Compare public String classForUnknownArray() {
    2.18 +        try {
    2.19 +            return Class.forName("[W").getName();
    2.20 +        } catch (Exception ex) {
    2.21 +            return ex.getClass().getName();
    2.22 +        }
    2.23 +    }
    2.24 +    
    2.25 +    @Compare public String classForUnknownDeepArray() {
    2.26 +        try {
    2.27 +            return Class.forName("[[[[[W").getName();
    2.28 +        } catch (Exception ex) {
    2.29 +            return ex.getClass().getName();
    2.30 +        }
    2.31 +    }
    2.32      
    2.33      @Compare public String componentGetNameForObjectArray() {
    2.34          return (new Object[3]).getClass().getComponentType().getName();