src/windows/native/sun/nio/ch/DatagramChannelImpl.c

Print this page

        

*** 43,64 **** --- 43,74 ---- JNIEXPORT void JNICALL Java_sun_nio_ch_DatagramChannelImpl_initIDs(JNIEnv *env, jclass clazz) { clazz = (*env)->FindClass(env, "java/net/InetSocketAddress"); + CHECK_NULL(clazz); isa_class = (*env)->NewGlobalRef(env, clazz); + if (isa_class == NULL) { + JNU_ThrowOutOfMemoryError(env, NULL); + return; + } isa_ctorID = (*env)->GetMethodID(env, clazz, "<init>", "(Ljava/net/InetAddress;I)V"); + CHECK_NULL(isa_ctorID); clazz = (*env)->FindClass(env, "sun/nio/ch/DatagramChannelImpl"); + CHECK_NULL(clazz); dci_senderID = (*env)->GetFieldID(env, clazz, "sender", "Ljava/net/SocketAddress;"); + CHECK_NULL(dci_senderID); dci_senderAddrID = (*env)->GetFieldID(env, clazz, "cachedSenderInetAddress", "Ljava/net/InetAddress;"); + CHECK_NULL(dci_senderAddrID); dci_senderPortID = (*env)->GetFieldID(env, clazz, "cachedSenderPort", "I"); + CHECK_NULL(dci_senderPortID); } /* * This function "purges" all outstanding ICMP port unreachable packets * outstanding on a socket and returns JNI_TRUE if any ICMP messages
*** 183,204 **** } } if (senderAddr == NULL) { jobject isa = NULL; int port; ! jobject ia = NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, ! &port); ! if (ia != NULL) { isa = (*env)->NewObject(env, isa_class, isa_ctorID, ia, port); } - if (isa == NULL) { - JNU_ThrowOutOfMemoryError(env, "heap allocation failed"); - return IOS_THROWN; - } - // update cachedSenderInetAddress/cachedSenderPort (*env)->SetObjectField(env, this, dci_senderAddrID, ia); (*env)->SetIntField(env, this, dci_senderPortID, NET_GetPortFromSockaddr((struct sockaddr *)&sa)); (*env)->SetObjectField(env, this, dci_senderID, isa); --- 193,208 ---- } } if (senderAddr == NULL) { jobject isa = NULL; int port; ! jobject ia = NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, &port); if (ia != NULL) { isa = (*env)->NewObject(env, isa_class, isa_ctorID, ia, port); } + CHECK_NULL_RETURN(isa, IOS_THROWN); // update cachedSenderInetAddress/cachedSenderPort (*env)->SetObjectField(env, this, dci_senderAddrID, ia); (*env)->SetIntField(env, this, dci_senderPortID, NET_GetPortFromSockaddr((struct sockaddr *)&sa)); (*env)->SetObjectField(env, this, dci_senderID, isa);