提交 790a6aaf 编写于 作者: C chegar

8027961: Inet[4|6]Address native initializing code should check field/MethodID values

Reviewed-by: michaelm, rriggs
上级 e29fbf9d
...@@ -46,5 +46,4 @@ Java_java_net_Inet4Address_init(JNIEnv *env, jclass cls) { ...@@ -46,5 +46,4 @@ Java_java_net_Inet4Address_init(JNIEnv *env, jclass cls) {
ia4_class = (*env)->NewGlobalRef(env, c); ia4_class = (*env)->NewGlobalRef(env, c);
CHECK_NULL(ia4_class); CHECK_NULL(ia4_class);
ia4_ctrID = (*env)->GetMethodID(env, ia4_class, "<init>", "()V"); ia4_ctrID = (*env)->GetMethodID(env, ia4_class, "<init>", "()V");
CHECK_NULL(ia4_ctrID);
} }
...@@ -65,9 +65,8 @@ Java_java_net_Inet6Address_init(JNIEnv *env, jclass cls) { ...@@ -65,9 +65,8 @@ Java_java_net_Inet6Address_init(JNIEnv *env, jclass cls) {
ia6_cachedscopeidID = (*env)->GetFieldID(env, ia6_class, "cached_scope_id", "I"); ia6_cachedscopeidID = (*env)->GetFieldID(env, ia6_class, "cached_scope_id", "I");
CHECK_NULL(ia6_cachedscopeidID); CHECK_NULL(ia6_cachedscopeidID);
ia6_scopeidsetID = (*env)->GetFieldID(env, ia6h_class, "scope_id_set", "Z"); ia6_scopeidsetID = (*env)->GetFieldID(env, ia6h_class, "scope_id_set", "Z");
CHECK_NULL(ia6_scopeidID); CHECK_NULL(ia6_scopeidsetID);
ia6_scopeifnameID = (*env)->GetFieldID(env, ia6h_class, "scope_ifname", "Ljava/net/NetworkInterface;"); ia6_scopeifnameID = (*env)->GetFieldID(env, ia6h_class, "scope_ifname", "Ljava/net/NetworkInterface;");
CHECK_NULL(ia6_scopeifnameID); CHECK_NULL(ia6_scopeifnameID);
ia6_ctrID = (*env)->GetMethodID(env, ia6_class, "<init>", "()V"); ia6_ctrID = (*env)->GetMethodID(env, ia6_class, "<init>", "()V");
CHECK_NULL(ia6_ctrID);
} }
...@@ -64,5 +64,4 @@ Java_java_net_InetAddress_init(JNIEnv *env, jclass cls) { ...@@ -64,5 +64,4 @@ Java_java_net_InetAddress_init(JNIEnv *env, jclass cls) {
iac_familyID = (*env)->GetFieldID(env, iac_class, "family", "I"); iac_familyID = (*env)->GetFieldID(env, iac_class, "family", "I");
CHECK_NULL(iac_familyID); CHECK_NULL(iac_familyID);
iac_hostNameID = (*env)->GetFieldID(env, iac_class, "hostName", "Ljava/lang/String;"); iac_hostNameID = (*env)->GetFieldID(env, iac_class, "hostName", "Ljava/lang/String;");
CHECK_NULL(iac_hostNameID);
} }
...@@ -55,17 +55,23 @@ static jclass ni_iacls; ...@@ -55,17 +55,23 @@ static jclass ni_iacls;
static jclass ni_ia4cls; static jclass ni_ia4cls;
static jmethodID ni_ia4ctrID; static jmethodID ni_ia4ctrID;
static void initializeInetClasses(JNIEnv *env) static jboolean initializeInetClasses(JNIEnv *env)
{ {
static int initialized = 0; static int initialized = 0;
if (!initialized) { if (!initialized) {
ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); ni_iacls = (*env)->FindClass(env, "java/net/InetAddress");
CHECK_NULL_RETURN(ni_iacls, JNI_FALSE);
ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); ni_iacls = (*env)->NewGlobalRef(env, ni_iacls);
CHECK_NULL_RETURN(ni_iacls, JNI_FALSE);
ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address");
CHECK_NULL_RETURN(ni_ia4cls, JNI_FALSE);
ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls);
CHECK_NULL_RETURN(ni_ia4cls, JNI_FALSE);
ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V");
CHECK_NULL_RETURN(ni_ia4ctrID, JNI_FALSE);
initialized = 1; initialized = 1;
} }
return JNI_TRUE;
} }
...@@ -141,7 +147,8 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, ...@@ -141,7 +147,8 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
int error=0; int error=0;
struct addrinfo hints, *res, *resNew = NULL; struct addrinfo hints, *res, *resNew = NULL;
initializeInetClasses(env); if (!initializeInetClasses(env))
return NULL;
if (IS_NULL(host)) { if (IS_NULL(host)) {
JNU_ThrowNullPointerException(env, "host is null"); JNU_ThrowNullPointerException(env, "host is null");
...@@ -400,7 +407,8 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, ...@@ -400,7 +407,8 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
int error = 0; int error = 0;
struct addrinfo hints, *res, *resNew = NULL; struct addrinfo hints, *res, *resNew = NULL;
initializeInetClasses(env); if (!initializeInetClasses(env))
return NULL;
if (IS_NULL(host)) { if (IS_NULL(host)) {
JNU_ThrowNullPointerException(env, "host is null"); JNU_ThrowNullPointerException(env, "host is null");
......
...@@ -124,25 +124,35 @@ static jmethodID ni_ia4ctrID; ...@@ -124,25 +124,35 @@ static jmethodID ni_ia4ctrID;
static jmethodID ni_ia6ctrID; static jmethodID ni_ia6ctrID;
static jboolean preferIPv6Address; static jboolean preferIPv6Address;
static void initializeInetClasses(JNIEnv *env) static jboolean initializeInetClasses(JNIEnv *env)
{ {
jfieldID ni_preferIPv6AddressID; jfieldID ni_preferIPv6AddressID;
static int initialized = 0; static int initialized = 0;
if (!initialized) { if (!initialized) {
ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); ni_iacls = (*env)->FindClass(env, "java/net/InetAddress");
CHECK_NULL_RETURN(ni_iacls, JNI_FALSE);
ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); ni_iacls = (*env)->NewGlobalRef(env, ni_iacls);
CHECK_NULL_RETURN(ni_iacls, JNI_FALSE);
ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address");
CHECK_NULL_RETURN(ni_ia4cls, JNI_FALSE);
ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls);
CHECK_NULL_RETURN(ni_ia4cls, JNI_FALSE);
ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address");
CHECK_NULL_RETURN(ni_ia6cls, JNI_FALSE);
ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls);
CHECK_NULL_RETURN(ni_ia6cls, JNI_FALSE);
ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V");
CHECK_NULL_RETURN(ni_ia4ctrID, JNI_FALSE);
ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V"); ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V");
CHECK_NULL_RETURN(ni_ia6ctrID, JNI_FALSE);
ni_preferIPv6AddressID = ni_preferIPv6AddressID =
(*env)->GetStaticFieldID(env, ni_iacls, "preferIPv6Address", "Z"); (*env)->GetStaticFieldID(env, ni_iacls, "preferIPv6Address", "Z");
CHECK_NULL_RETURN(ni_preferIPv6AddressID, JNI_FALSE);
preferIPv6Address = preferIPv6Address =
(*env)->GetStaticBooleanField(env, ia_class, ia_preferIPv6AddressID); (*env)->GetStaticBooleanField(env, ia_class, ia_preferIPv6AddressID);
initialized = 1; initialized = 1;
} }
return JNI_TRUE;
} }
#ifdef MACOSX #ifdef MACOSX
...@@ -160,7 +170,8 @@ lookupIfLocalhost(JNIEnv *env, const char *hostname, jboolean includeV6) ...@@ -160,7 +170,8 @@ lookupIfLocalhost(JNIEnv *env, const char *hostname, jboolean includeV6)
jobject name; jobject name;
// Make sure static variables we need are set. // Make sure static variables we need are set.
initializeInetClasses(env); if (!initializeInetClasses(env))
return NULL;
/* If the requested name matches this host's hostname, return IP addresses /* If the requested name matches this host's hostname, return IP addresses
* from all attached interfaces. (#2844683 et al) This prevents undesired * from all attached interfaces. (#2844683 et al) This prevents undesired
...@@ -286,7 +297,8 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, ...@@ -286,7 +297,8 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
struct addrinfo hints, *res, *resNew = NULL; struct addrinfo hints, *res, *resNew = NULL;
#endif /* AF_INET6 */ #endif /* AF_INET6 */
initializeInetClasses(env); if (!initializeInetClasses(env))
return NULL;
if (IS_NULL(host)) { if (IS_NULL(host)) {
JNU_ThrowNullPointerException(env, "host is null"); JNU_ThrowNullPointerException(env, "host is null");
......
...@@ -142,10 +142,15 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, ...@@ -142,10 +142,15 @@ Java_java_net_Inet4AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
if (!initialized) { if (!initialized) {
ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); ni_iacls = (*env)->FindClass(env, "java/net/InetAddress");
CHECK_NULL_RETURN(ni_iacls, NULL);
ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); ni_iacls = (*env)->NewGlobalRef(env, ni_iacls);
CHECK_NULL_RETURN(ni_iacls, NULL);
ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address");
CHECK_NULL_RETURN(ni_ia4cls, NULL);
ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls);
CHECK_NULL_RETURN(ni_ia4cls, NULL);
ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V");
CHECK_NULL_RETURN(ni_ia4ctrID, NULL);
initialized = 1; initialized = 1;
} }
......
...@@ -93,13 +93,21 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this, ...@@ -93,13 +93,21 @@ Java_java_net_Inet6AddressImpl_lookupAllHostAddr(JNIEnv *env, jobject this,
if (!initialized) { if (!initialized) {
ni_iacls = (*env)->FindClass(env, "java/net/InetAddress"); ni_iacls = (*env)->FindClass(env, "java/net/InetAddress");
CHECK_NULL_RETURN(ni_iacls, NULL);
ni_iacls = (*env)->NewGlobalRef(env, ni_iacls); ni_iacls = (*env)->NewGlobalRef(env, ni_iacls);
CHECK_NULL_RETURN(ni_iacls, NULL);
ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address"); ni_ia4cls = (*env)->FindClass(env, "java/net/Inet4Address");
CHECK_NULL_RETURN(ni_ia4cls, NULL);
ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls); ni_ia4cls = (*env)->NewGlobalRef(env, ni_ia4cls);
CHECK_NULL_RETURN(ni_ia4cls, NULL);
ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address"); ni_ia6cls = (*env)->FindClass(env, "java/net/Inet6Address");
CHECK_NULL_RETURN(ni_ia6cls, NULL);
ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls); ni_ia6cls = (*env)->NewGlobalRef(env, ni_ia6cls);
CHECK_NULL_RETURN(ni_ia6cls, NULL);
ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V"); ni_ia4ctrID = (*env)->GetMethodID(env, ni_ia4cls, "<init>", "()V");
CHECK_NULL_RETURN(ni_ia4ctrID, NULL);
ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V"); ni_ia6ctrID = (*env)->GetMethodID(env, ni_ia6cls, "<init>", "()V");
CHECK_NULL_RETURN(ni_ia6ctrID, NULL);
initialized = 1; initialized = 1;
} }
if (IS_NULL(host)) { if (IS_NULL(host)) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册