diff options
Diffstat (limited to 'native/jni/java-net/gnu_java_net_VMPlainDatagramSocketImpl.c')
-rw-r--r-- | native/jni/java-net/gnu_java_net_VMPlainDatagramSocketImpl.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/native/jni/java-net/gnu_java_net_VMPlainDatagramSocketImpl.c b/native/jni/java-net/gnu_java_net_VMPlainDatagramSocketImpl.c index e608e1dde..3a451c763 100644 --- a/native/jni/java-net/gnu_java_net_VMPlainDatagramSocketImpl.c +++ b/native/jni/java-net/gnu_java_net_VMPlainDatagramSocketImpl.c @@ -185,20 +185,20 @@ Java_gnu_java_net_VMPlainDatagramSocketImpl_nativeReceive(JNIEnv *env, jintArray receivedLength) { #ifndef WITHOUT_NETWORK - int *port, *bytes_read; + jint *port, *bytes_read; cpnet_address *addr; jbyte *addressBytes; addr = 0; - port = (int*)(*env)->GetIntArrayElements(env, receivedFromPort, NULL); + port = (jint*)(*env)->GetIntArrayElements(env, receivedFromPort, NULL); if (port == NULL) { JCL_ThrowException(env, IO_EXCEPTION, "Internal error: could not access receivedFromPort array"); return; } - bytes_read = (int*)(*env)->GetIntArrayElements(env, receivedLength, NULL); + bytes_read = (jint*)(*env)->GetIntArrayElements(env, receivedLength, NULL); if (bytes_read == NULL) { (*env)->ReleaseIntArrayElements(env, receivedFromPort, (jint*)port, 0); @@ -215,7 +215,6 @@ Java_gnu_java_net_VMPlainDatagramSocketImpl_nativeReceive(JNIEnv *env, if (length == 0 && (*bytes_read) == -1) *bytes_read = 0; - if ((*bytes_read) == -1) { (*env)->ReleaseIntArrayElements(env, receivedFromPort, (jint*)port, 0); @@ -224,6 +223,9 @@ Java_gnu_java_net_VMPlainDatagramSocketImpl_nativeReceive(JNIEnv *env, return; } + if ((*env)->ExceptionOccurred(env)) + return; + *port = cpnet_addressGetPort (addr); /* Store the address */ @@ -236,11 +238,6 @@ Java_gnu_java_net_VMPlainDatagramSocketImpl_nativeReceive(JNIEnv *env, (*env)->ReleaseIntArrayElements(env, receivedFromPort, (jint*)port, 0); (*env)->ReleaseIntArrayElements(env, receivedLength, (jint*)bytes_read, 0); - if ((*env)->ExceptionOccurred(env)) - { - return; - } - DBG("PlainDatagramSocketImpl.receive(): Received packet\n"); #else /* not WITHOUT_NETWORK */ @@ -266,13 +263,20 @@ Java_gnu_java_net_VMPlainDatagramSocketImpl_nativeSendTo(JNIEnv *env, cpnet_address *netAddress; /* check if address given, tr 7.3.2005 */ - if (addr != NULL) + if (addr != NULL ) { netAddress = _javanet_get_ip_netaddr(env, addr); if ((*env)->ExceptionOccurred(env)) - { + { return; } + if (port == 0) + { + JCL_ThrowException(env, IO_EXCEPTION, + "Invalid port number"); + cpnet_freeAddress(env, netAddress); + return; + } cpnet_addressSetPort (netAddress, port); } else @@ -283,6 +287,8 @@ Java_gnu_java_net_VMPlainDatagramSocketImpl_nativeSendTo(JNIEnv *env, DBG("PlainDatagramSocketImpl.sendto(): have addr\n"); _javanet_sendto(env, obj, buf, offset, len, netAddress); + if (netAddress != NULL) + cpnet_freeAddress(env, netAddress); if ((*env)->ExceptionOccurred(env)) { return; |