Mercurial > hg > release > icedtea7-forest-2.6 > jdk
changeset 9663:9ee218963c38
8168405: Pending exceptions in java.base/windows/native
Reviewed-by: chegar, clanger
author | prappo |
---|---|
date | Mon, 22 Oct 2018 03:49:04 +0100 |
parents | e79b91c89733 |
children | 6198ee2d85af |
files | src/windows/native/java/net/NetworkInterface_winXP.c src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c src/windows/native/java/net/TwoStacksPlainSocketImpl.c |
diffstat | 3 files changed, 50 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/src/windows/native/java/net/NetworkInterface_winXP.c Mon Oct 22 03:12:13 2018 +0100 +++ b/src/windows/native/java/net/NetworkInterface_winXP.c Mon Oct 22 03:49:04 2018 +0100 @@ -436,14 +436,20 @@ * Create a NetworkInterface object and populate it */ netifObj = (*env)->NewObject(env, ni_class, ni_ctor); + if (netifObj == NULL) { + return NULL; + } name = (*env)->NewStringUTF(env, ifs->name); + if (name == NULL) { + return NULL; + } if (ifs->dNameIsUnicode) { displayName = (*env)->NewString(env, (PWCHAR)ifs->displayName, (jsize)wcslen ((PWCHAR)ifs->displayName)); } else { displayName = (*env)->NewStringUTF(env, ifs->displayName); } - if (netifObj == NULL || name == NULL || displayName == NULL) { + if (displayName == NULL) { return NULL; } (*env)->SetObjectField(env, netifObj, ni_nameID, name); @@ -505,26 +511,28 @@ (*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj); } else /* AF_INET6 */ { int scope; + int ret; iaObj = (*env)->NewObject(env, ni_ia6cls, ni_ia6ctrID); - if (iaObj) { - int ret = setInet6Address_ipaddress(env, iaObj, (jbyte *)&(addrs->addr.him6.sin6_addr.s6_addr)); - if (ret == JNI_FALSE) { - return NULL; - } - scope = addrs->addr.him6.sin6_scope_id; - if (scope != 0) { /* zero is default value, no need to set */ - setInet6Address_scopeid(env, iaObj, scope); - setInet6Address_scopeifname(env, iaObj, netifObj); - } - ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); - if (ibObj == NULL) { - free_netaddr(netaddrP); - return NULL; - } - (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); - (*env)->SetShortField(env, ibObj, ni_ibmaskID, addrs->mask); - (*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj); + if (iaObj == NULL) { + return NULL; + } + ret = setInet6Address_ipaddress(env, iaObj, (jbyte *)&(addrs->addr.him6.sin6_addr.s6_addr)); + if (ret == JNI_FALSE) { + return NULL; } + scope = addrs->addr.him6.sin6_scope_id; + if (scope != 0) { /* zero is default value, no need to set */ + setInet6Address_scopeid(env, iaObj, scope); + setInet6Address_scopeifname(env, iaObj, netifObj); + } + ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); + if (ibObj == NULL) { + free_netaddr(netaddrP); + return NULL; + } + (*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj); + (*env)->SetShortField(env, ibObj, ni_ibmaskID, addrs->mask); + (*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj); } (*env)->SetObjectArrayElement(env, addrArr, addr_index, iaObj); addrs = addrs->next;
--- a/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c Mon Oct 22 03:12:13 2018 +0100 +++ b/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c Mon Oct 22 03:49:04 2018 +0100 @@ -832,6 +832,7 @@ } if (IS_NULL(addressObj)) { JNU_ThrowNullPointerException(env, "Null address in peek()"); + return -1; } else { address = getInetAddress_addr(env, addressObj); JNU_CHECK_EXCEPTION_RETURN(env, -1); @@ -1147,11 +1148,23 @@ } if (n == -1) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "socket closed"); + if (packetBufferLen > MAX_BUFFER_LEN) { + free(fullPacket); + } + return -1; } else if (n == -2) { JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException", "operation interrupted"); + if (packetBufferLen > MAX_BUFFER_LEN) { + free(fullPacket); + } + return -1; } else if (n < 0) { NET_ThrowCurrent(env, "Datagram receive failed"); + if (packetBufferLen > MAX_BUFFER_LEN) { + free(fullPacket); + } + return -1; } else { jobject packetAddress; @@ -1914,7 +1927,7 @@ default : JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket option not supported by PlainDatagramSocketImp"); - break; + return; } @@ -2323,6 +2336,7 @@ if (NET_SetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&ittl, sizeof (ittl)) < 0) { NET_ThrowCurrent(env, "set IP_MULTICAST_TTL failed"); + return; } } @@ -2513,6 +2527,9 @@ } else { ifindex = getIndexFromIf (env, niObj); if (ifindex == -1) { + if ((*env)->ExceptionOccurred(env)) { + return; + } NET_ThrowCurrent(env, "get ifindex failed"); return; }
--- a/src/windows/native/java/net/TwoStacksPlainSocketImpl.c Mon Oct 22 03:12:13 2018 +0100 +++ b/src/windows/native/java/net/TwoStacksPlainSocketImpl.c Mon Oct 22 03:49:04 2018 +0100 @@ -110,7 +110,7 @@ psi_portID = (*env)->GetFieldID(env, cls, "port", "I"); CHECK_NULL(psi_portID); psi_lastfdID = (*env)->GetFieldID(env, cls, "lastfd", "I"); - CHECK_NULL(psi_portID); + CHECK_NULL(psi_lastfdID); psi_localportID = (*env)->GetFieldID(env, cls, "localport", "I"); CHECK_NULL(psi_localportID); psi_timeoutID = (*env)->GetFieldID(env, cls, "timeout", "I"); @@ -155,17 +155,17 @@ fd1Obj = (*env)->GetObjectField(env, this, psi_fd1ID); if (IS_NULL(fd1Obj)) { + (*env)->SetIntField(env, fdObj, IO_fd_fdID, -1); + NET_SocketClose(fd); JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "null fd1 object"); - (*env)->SetIntField(env, fdObj, IO_fd_fdID, -1); - NET_SocketClose(fd); return; } fd1 = socket(AF_INET6, (stream ? SOCK_STREAM: SOCK_DGRAM), 0); if (fd1 == -1) { - NET_ThrowCurrent(env, "create"); (*env)->SetIntField(env, fdObj, IO_fd_fdID, -1); NET_SocketClose(fd); + NET_ThrowCurrent(env, "create"); return; } else { /* Set socket attribute so it is not passed to any child process */ @@ -916,6 +916,7 @@ isRcvTimeoutSupported = JNI_FALSE; } else { NET_ThrowCurrent(env, "setsockopt SO_RCVTIMEO"); + return; } } if (fd1 != -1) {