33 #include <stdlib.h> |
33 #include <stdlib.h> |
34 |
34 |
35 #include "jni.h" |
35 #include "jni.h" |
36 #include "jni_util.h" |
36 #include "jni_util.h" |
37 #include "jvm.h" |
37 #include "jvm.h" |
|
38 #include "check_classname.h" |
38 #include "java_lang_Class.h" |
39 #include "java_lang_Class.h" |
39 |
|
40 /* defined in libverify.so/verify.dll (src file common/check_format.c) */ |
|
41 extern jboolean VerifyClassname(char *utf_name, jboolean arrayAllowed); |
|
42 extern jboolean VerifyFixClassname(char *utf_name); |
|
43 |
40 |
44 #define OBJ "Ljava/lang/Object;" |
41 #define OBJ "Ljava/lang/Object;" |
45 #define CLS "Ljava/lang/Class;" |
42 #define CLS "Ljava/lang/Class;" |
46 #define CPL "Ljdk/internal/reflect/ConstantPool;" |
43 #define CPL "Ljdk/internal/reflect/ConstantPool;" |
47 #define STR "Ljava/lang/String;" |
44 #define STR "Ljava/lang/String;" |
121 } else { |
118 } else { |
122 clname = buf; |
119 clname = buf; |
123 } |
120 } |
124 (*env)->GetStringUTFRegion(env, classname, 0, unicode_len, clname); |
121 (*env)->GetStringUTFRegion(env, classname, 0, unicode_len, clname); |
125 |
122 |
126 if (VerifyFixClassname(clname) == JNI_TRUE) { |
123 if (verifyFixClassname(clname) == JNI_TRUE) { |
127 /* slashes present in clname, use name b4 translation for exception */ |
124 /* slashes present in clname, use name b4 translation for exception */ |
128 (*env)->GetStringUTFRegion(env, classname, 0, unicode_len, clname); |
125 (*env)->GetStringUTFRegion(env, classname, 0, unicode_len, clname); |
129 JNU_ThrowClassNotFoundException(env, clname); |
126 JNU_ThrowClassNotFoundException(env, clname); |
130 goto done; |
127 goto done; |
131 } |
128 } |
132 |
129 |
133 if (!VerifyClassname(clname, JNI_TRUE)) { /* expects slashed name */ |
130 if (!verifyClassname(clname, JNI_TRUE)) { /* expects slashed name */ |
134 JNU_ThrowClassNotFoundException(env, clname); |
131 JNU_ThrowClassNotFoundException(env, clname); |
135 goto done; |
132 goto done; |
136 } |
133 } |
137 |
134 |
138 cls = JVM_FindClassFromCaller(env, clname, initialize, loader, caller); |
135 cls = JVM_FindClassFromCaller(env, clname, initialize, loader, caller); |