# HG changeset patch # User igerasim # Date 1516986548 28800 # Node ID 81fa2439e25765e1d605d794d05776656f5f6cca # Parent 015385190f068e48d8e2466c0ffcac2f22050175 8193419: Better Internet address support Reviewed-by: chegar, rriggs, igerasim, skoivu, rhalade diff -r 015385190f06 -r 81fa2439e257 src/share/native/common/jni_util.h --- a/src/share/native/common/jni_util.h Thu Feb 01 20:19:42 2018 -0800 +++ b/src/share/native/common/jni_util.h Fri Jan 26 09:09:08 2018 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2004, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -292,6 +292,22 @@ } \ } while (0) \ +#define CHECK_NULL_THROW_NPE(env, x, msg) \ + do { \ + if ((x) == NULL) { \ + JNU_ThrowNullPointerException((env), (msg));\ + return; \ + } \ + } while(0) \ + +#define CHECK_NULL_THROW_NPE_RETURN(env, x, msg, z)\ + do { \ + if ((x) == NULL) { \ + JNU_ThrowNullPointerException((env), (msg));\ + return (z); \ + } \ + } while(0) \ + #define CHECK_NULL_RETURN(x, y) \ do { \ if ((x) == NULL) { \ diff -r 015385190f06 -r 81fa2439e257 src/share/native/java/net/net_util.c --- a/src/share/native/java/net/net_util.c Thu Feb 01 20:19:42 2018 -0800 +++ b/src/share/native/java/net/net_util.c Fri Jan 26 09:09:08 2018 -0800 @@ -210,6 +210,7 @@ jobject holder; init(env); holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + CHECK_NULL_THROW_NPE(env, holder, "InetAddress holder is null"); (*env)->SetIntField(env, holder, iac_addressID, address); } @@ -218,6 +219,7 @@ jobject holder; init(env); holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + CHECK_NULL_THROW_NPE(env, holder, "InetAddress holder is null"); (*env)->SetIntField(env, holder, iac_familyID, family); } @@ -225,6 +227,7 @@ jobject holder; init(env); holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + CHECK_NULL_THROW_NPE(env, holder, "InetAddress holder is null"); (*env)->SetObjectField(env, holder, iac_hostNameID, host); (*env)->SetObjectField(env, holder, iac_origHostNameID, host); } @@ -234,6 +237,7 @@ jobject holder; init(env); holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + CHECK_NULL_THROW_NPE_RETURN(env, holder, "InetAddress holder is null", -1); return (*env)->GetIntField(env, holder, iac_addressID); } @@ -242,6 +246,7 @@ jobject holder; init(env); holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + CHECK_NULL_THROW_NPE_RETURN(env, holder, "InetAddress holder is null", -1); return (*env)->GetIntField(env, holder, iac_familyID); } @@ -249,6 +254,7 @@ jobject holder; init(env); holder = (*env)->GetObjectField(env, iaObj, ia_holderID); + CHECK_NULL_THROW_NPE_RETURN(env, holder, "InetAddress holder is null", NULL); return (*env)->GetObjectField(env, holder, iac_hostNameID); } @@ -279,7 +285,9 @@ CHECK_NULL_RETURN(iaObj, NULL); address = NET_IPv4MappedToIPv4(caddr); setInetAddress_addr(env, iaObj, address); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); setInetAddress_family(env, iaObj, IPv4); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); } else { static jclass inet6Cls = 0; int ret; @@ -295,6 +303,7 @@ ret = setInet6Address_ipaddress(env, iaObj, (char *)&(him6->sin6_addr)); CHECK_NULL_RETURN(ret, NULL); setInetAddress_family(env, iaObj, IPv6); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); setInet6Address_scopeid(env, iaObj, getScopeID(him)); } *port = ntohs(him6->sin6_port); @@ -314,7 +323,9 @@ iaObj = (*env)->NewObject(env, inet4Cls, ia4_ctrID); CHECK_NULL_RETURN(iaObj, NULL); setInetAddress_family(env, iaObj, IPv4); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); setInetAddress_addr(env, iaObj, ntohl(him4->sin_addr.s_addr)); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); *port = ntohs(him4->sin_port); } return iaObj; @@ -324,7 +335,7 @@ NET_SockaddrEqualsInetAddress(JNIEnv *env, struct sockaddr *him, jobject iaObj) { jint family = getInetAddress_family(env, iaObj) == IPv4?AF_INET : AF_INET6; - + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); #ifdef AF_INET6 if (him->sa_family == AF_INET6) { #ifdef WIN32 @@ -341,6 +352,7 @@ } addrNew = NET_IPv4MappedToIPv4(caddrNew); addrCur = getInetAddress_addr(env, iaObj); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); if (addrNew == addrCur) { return JNI_TRUE; } else { @@ -372,6 +384,7 @@ } addrNew = ntohl(him4->sin_addr.s_addr); addrCur = getInetAddress_addr(env, iaObj); + JNU_CHECK_EXCEPTION_RETURN(env, JNI_FALSE); if (addrNew == addrCur) { return JNI_TRUE; } else { diff -r 015385190f06 -r 81fa2439e257 src/solaris/native/java/net/Inet4AddressImpl.c --- a/src/solaris/native/java/net/Inet4AddressImpl.c Thu Feb 01 20:19:42 2018 -0800 +++ b/src/solaris/native/java/net/Inet4AddressImpl.c Fri Jan 26 09:09:08 2018 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -223,7 +223,11 @@ goto cleanupAndReturn; } setInetAddress_addr(env, iaObj, ntohl((*addrp)->s_addr)); + if ((*env)->ExceptionCheck(env)) + goto cleanupAndReturn; setInetAddress_hostName(env, iaObj, name); + if ((*env)->ExceptionCheck(env)) + goto cleanupAndReturn; (*env)->SetObjectArrayElement(env, ret, i, iaObj); addrp++; i++; diff -r 015385190f06 -r 81fa2439e257 src/solaris/native/java/net/Inet6AddressImpl.c --- a/src/solaris/native/java/net/Inet6AddressImpl.c Thu Feb 01 20:19:42 2018 -0800 +++ b/src/solaris/native/java/net/Inet6AddressImpl.c Fri Jan 26 09:09:08 2018 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -315,7 +315,11 @@ goto cleanupAndReturn; } setInetAddress_addr(env, iaObj, ntohl(((struct sockaddr_in*)iterator->ai_addr)->sin_addr.s_addr)); + if ((*env)->ExceptionCheck(env)) + goto cleanupAndReturn; setInetAddress_hostName(env, iaObj, name); + if ((*env)->ExceptionCheck(env)) + goto cleanupAndReturn; (*env)->SetObjectArrayElement(env, ret, inetIndex, iaObj); inetIndex++; } else if (iterator->ai_family == AF_INET6) { @@ -342,6 +346,8 @@ setInet6Address_scopeid(env, iaObj, scope); } setInetAddress_hostName(env, iaObj, name); + if ((*env)->ExceptionCheck(env)) + goto cleanupAndReturn; (*env)->SetObjectArrayElement(env, ret, inet6Index, iaObj); inet6Index++; } diff -r 015385190f06 -r 81fa2439e257 src/solaris/native/java/net/NetworkInterface.c --- a/src/solaris/native/java/net/NetworkInterface.c Thu Feb 01 20:19:42 2018 -0800 +++ b/src/solaris/native/java/net/NetworkInterface.c Fri Jan 26 09:09:08 2018 -0800 @@ -274,9 +274,10 @@ (JNIEnv *env, jclass cls, jobject iaObj) { netif *ifs, *curr; - int family = (getInetAddress_family(env, iaObj) == IPv4) ? AF_INET : AF_INET6; jobject obj = NULL; jboolean match = JNI_FALSE; + int family = (getInetAddress_family(env, iaObj) == IPv4) ? AF_INET : AF_INET6; + JNU_CHECK_EXCEPTION_RETURN(env, NULL); ifs = enumInterfaces(env); if (ifs == NULL) { @@ -296,7 +297,7 @@ if (family == AF_INET) { int address1 = htonl(((struct sockaddr_in*)addrP->addr)->sin_addr.s_addr); int address2 = getInetAddress_addr(env, iaObj); - + JNU_CHECK_EXCEPTION_RETURN(env, NULL); if (address1 == address2) { match = JNI_TRUE; break; @@ -628,6 +629,7 @@ iaObj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); if (iaObj) { setInetAddress_addr(env, iaObj, htonl(((struct sockaddr_in*)addrP->addr)->sin_addr.s_addr)); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); } ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); if (ibObj) { @@ -637,6 +639,7 @@ ia2Obj = (*env)->NewObject(env, ni_ia4cls, ni_ia4ctrID); if (ia2Obj) { setInetAddress_addr(env, ia2Obj, htonl(((struct sockaddr_in*)addrP->brdcast)->sin_addr.s_addr)); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); (*env)->SetObjectField(env, ibObj, ni_ib4broadcastID, ia2Obj); (*env)->SetShortField(env, ibObj, ni_ib4maskID, addrP->mask); } diff -r 015385190f06 -r 81fa2439e257 src/solaris/native/java/net/PlainDatagramSocketImpl.c --- a/src/solaris/native/java/net/PlainDatagramSocketImpl.c Thu Feb 01 20:19:42 2018 -0800 +++ b/src/solaris/native/java/net/PlainDatagramSocketImpl.c Fri Jan 26 09:09:08 2018 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -606,9 +606,12 @@ iaObj = NET_SockaddrToInetAddress(env, (struct sockaddr *)&remote_addr, &port); family = getInetAddress_family(env, iaObj) == IPv4? AF_INET : AF_INET6; + JNU_CHECK_EXCEPTION_RETURN(env, -1); if (family == AF_INET) { /* this api can't handle IPV6 addresses */ int address = getInetAddress_addr(env, iaObj); + JNU_CHECK_EXCEPTION_RETURN(env, -1); setInetAddress_addr(env, addressObj, address); + JNU_CHECK_EXCEPTION_RETURN(env, -1); } return port; } @@ -1164,7 +1167,9 @@ for (i = 0; i < len; i++) { addr = (*env)->GetObjectArrayElement(env, addrArray, i); if (getInetAddress_family(env, addr) == IPv4) { + JNU_CHECK_EXCEPTION(env); in.s_addr = htonl(getInetAddress_addr(env, addr)); + JNU_CHECK_EXCEPTION(env); break; } } @@ -1226,6 +1231,7 @@ in.s_addr = htonl( getInetAddress_addr(env, value) ); + JNU_CHECK_EXCEPTION(env); if (JVM_SetSockOpt(fd, IPPROTO_IP, IP_MULTICAST_IF, (const char*)&in, sizeof(in)) < 0) { NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", @@ -1610,6 +1616,7 @@ #else setInetAddress_addr(env, addr, ntohl(in.s_addr)); #endif + JNU_CHECK_EXCEPTION_RETURN(env, NULL); /* * For IP_MULTICAST_IF return InetAddress @@ -2101,6 +2108,7 @@ #ifdef __linux__ if (getInetAddress_family(env, iaObj) == IPv4) { + JNU_CHECK_EXCEPTION(env); ipv6_join_leave = JNI_FALSE; } #endif @@ -2148,6 +2156,7 @@ } mname.imr_multiaddr.s_addr = htonl(getInetAddress_addr(env, iaObj)); + JNU_CHECK_EXCEPTION(env); mname.imr_address.s_addr = 0; mname.imr_ifindex = (*env)->GetIntField(env, niObj, ni_indexID); mname_len = sizeof(struct ip_mreqn); @@ -2166,10 +2175,13 @@ addr = (*env)->GetObjectArrayElement(env, addrArray, 0); mname.imr_multiaddr.s_addr = htonl(getInetAddress_addr(env, iaObj)); + JNU_CHECK_EXCEPTION(env); #ifdef __linux__ mname.imr_address.s_addr = htonl(getInetAddress_addr(env, addr)); + JNU_CHECK_EXCEPTION(env); #else mname.imr_interface.s_addr = htonl(getInetAddress_addr(env, addr)); + JNU_CHECK_EXCEPTION(env); #endif mname_len = sizeof(struct ip_mreq); } @@ -2209,6 +2221,7 @@ } mname.imr_multiaddr.s_addr = htonl(getInetAddress_addr(env, iaObj)); + JNU_CHECK_EXCEPTION(env); mname.imr_address.s_addr = 0 ; mname.imr_ifindex = index; mname_len = sizeof(struct ip_mreqn); @@ -2239,6 +2252,7 @@ mname.imr_interface.s_addr = in.s_addr; #endif mname.imr_multiaddr.s_addr = htonl(getInetAddress_addr(env, iaObj)); + JNU_CHECK_EXCEPTION(env); mname_len = sizeof(struct ip_mreq); } } @@ -2304,10 +2318,12 @@ jint family; jint address; family = getInetAddress_family(env, iaObj) == IPv4? AF_INET : AF_INET6; + JNU_CHECK_EXCEPTION(env); if (family == AF_INET) { /* will convert to IPv4-mapped address */ memset((char *) caddr, 0, 16); address = getInetAddress_addr(env, iaObj); + JNU_CHECK_EXCEPTION(env); caddr[10] = 0xff; caddr[11] = 0xff; diff -r 015385190f06 -r 81fa2439e257 src/solaris/native/java/net/net_util_md.c --- a/src/solaris/native/java/net/net_util_md.c Thu Feb 01 20:19:42 2018 -0800 +++ b/src/solaris/native/java/net/net_util_md.c Fri Jan 26 09:09:08 2018 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -672,6 +672,7 @@ int *len, jboolean v4MappedAddress) { jint family; family = getInetAddress_family(env, iaObj); + JNU_CHECK_EXCEPTION_RETURN(env, -1); #ifdef AF_INET6 /* needs work. 1. family 2. clean up him6 etc deallocate memory */ if (ipv6_available() && !(family == IPv4 && v4MappedAddress == JNI_FALSE)) { @@ -683,6 +684,7 @@ if (family == IPv4) { /* will convert to IPv4-mapped address */ memset((char *) caddr, 0, 16); address = getInetAddress_addr(env, iaObj); + JNU_CHECK_EXCEPTION_RETURN(env, -1); if (address == INADDR_ANY) { /* we would always prefer IPv6 wildcard address caddr[10] = 0xff; @@ -789,6 +791,7 @@ } memset((char *) him4, 0, sizeof(struct sockaddr_in)); address = getInetAddress_addr(env, iaObj); + JNU_CHECK_EXCEPTION_RETURN(env, -1); him4->sin_port = htons((short) port); him4->sin_addr.s_addr = (uint32_t) htonl(address); him4->sin_family = AF_INET; diff -r 015385190f06 -r 81fa2439e257 src/windows/native/java/net/Inet4AddressImpl.c --- a/src/windows/native/java/net/Inet4AddressImpl.c Thu Feb 01 20:19:42 2018 -0800 +++ b/src/windows/native/java/net/Inet4AddressImpl.c Fri Jan 26 09:09:08 2018 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -209,6 +209,8 @@ goto cleanupAndReturn; } setInetAddress_addr(env, iaObj, ntohl(address)); + if ((*env)->ExceptionCheck(env)) + goto cleanupAndReturn; (*env)->SetObjectArrayElement(env, ret, 0, iaObj); JNU_ReleaseStringPlatformChars(env, host, hostname); return ret; @@ -242,7 +244,11 @@ goto cleanupAndReturn; } setInetAddress_addr(env, iaObj, ntohl((*addrp)->s_addr)); + if ((*env)->ExceptionCheck(env)) + goto cleanupAndReturn; setInetAddress_hostName(env, iaObj, host); + if ((*env)->ExceptionCheck(env)) + goto cleanupAndReturn; (*env)->SetObjectArrayElement(env, ret, i, iaObj); addrp++; i++; diff -r 015385190f06 -r 81fa2439e257 src/windows/native/java/net/Inet6AddressImpl.c --- a/src/windows/native/java/net/Inet6AddressImpl.c Thu Feb 01 20:19:42 2018 -0800 +++ b/src/windows/native/java/net/Inet6AddressImpl.c Fri Jan 26 09:09:08 2018 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2006, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -240,8 +240,12 @@ ret = NULL; goto cleanupAndReturn; } - setInetAddress_addr(env, iaObj, ntohl(((struct sockaddr_in*)iterator->ai_addr)->sin_addr.s_addr)); - setInetAddress_hostName(env, iaObj, host); + setInetAddress_addr(env, iaObj, ntohl(((struct sockaddr_in*)iterator->ai_addr)->sin_addr.s_addr)); + if ((*env)->ExceptionCheck(env)) + goto cleanupAndReturn; + setInetAddress_hostName(env, iaObj, host); + if ((*env)->ExceptionCheck(env)) + goto cleanupAndReturn; (*env)->SetObjectArrayElement(env, ret, inetIndex, iaObj); inetIndex ++; } else if (iterator->ai_family == AF_INET6) { @@ -260,7 +264,9 @@ if (scope != 0) { /* zero is default value, no need to set */ setInet6Address_scopeid(env, iaObj, scope); } - setInetAddress_hostName(env, iaObj, host); + setInetAddress_hostName(env, iaObj, host); + if ((*env)->ExceptionCheck(env)) + goto cleanupAndReturn; (*env)->SetObjectArrayElement(env, ret, inet6Index, iaObj); inet6Index ++; } diff -r 015385190f06 -r 81fa2439e257 src/windows/native/java/net/NetworkInterface.c --- a/src/windows/native/java/net/NetworkInterface.c Thu Feb 01 20:19:42 2018 -0800 +++ b/src/windows/native/java/net/NetworkInterface.c Fri Jan 26 09:09:08 2018 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -536,6 +536,7 @@ /* default ctor will set family to AF_INET */ setInetAddress_addr(env, iaObj, ntohl(addrs->addr.him4.sin_addr.s_addr)); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); if (addrs->mask != -1) { ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); if (ibObj == NULL) { @@ -549,6 +550,7 @@ return NULL; } setInetAddress_addr(env, ia2Obj, ntohl(addrs->brdcast.him4.sin_addr.s_addr)); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); (*env)->SetObjectField(env, ibObj, ni_ibbroadcastID, ia2Obj); (*env)->SetShortField(env, ibObj, ni_ibmaskID, addrs->mask); (*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj); @@ -699,8 +701,9 @@ (JNIEnv *env, jclass cls, jobject iaObj) { netif *ifList, *curr; + jobject netifObj = NULL; jint addr = getInetAddress_addr(env, iaObj); - jobject netifObj = NULL; + JNU_CHECK_EXCEPTION_RETURN(env, NULL); // Retained for now to support IPv4 only stack, java.net.preferIPv4Stack if (ipv6_available()) { diff -r 015385190f06 -r 81fa2439e257 src/windows/native/java/net/NetworkInterface_winXP.c --- a/src/windows/native/java/net/NetworkInterface_winXP.c Thu Feb 01 20:19:42 2018 -0800 +++ b/src/windows/native/java/net/NetworkInterface_winXP.c Fri Jan 26 09:09:08 2018 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -494,6 +494,7 @@ setInetAddress_addr(env, iaObj, ntohl(addrs->addr.him4.sin_addr.s_addr)); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID); if (ibObj == NULL) { free_netaddr(netaddrP); @@ -506,6 +507,7 @@ return NULL; } setInetAddress_addr(env, ia2Obj, ntohl(addrs->brdcast.him4.sin_addr.s_addr)); + JNU_CHECK_EXCEPTION_RETURN(env, NULL); (*env)->SetObjectField(env, ibObj, ni_ibbroadcastID, ia2Obj); (*env)->SetShortField(env, ibObj, ni_ibmaskID, addrs->mask); (*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj); diff -r 015385190f06 -r 81fa2439e257 src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c --- a/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c Thu Feb 01 20:19:42 2018 -0800 +++ b/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c Fri Jan 26 09:09:08 2018 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -440,12 +440,13 @@ int address; family = getInetAddress_family(env, addressObj); + JNU_CHECK_EXCEPTION(env); if (family == IPv6 && !ipv6_supported) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Protocol family not supported"); return; } - + JNU_CHECK_EXCEPTION(env); if (IS_NULL(fdObj) || (ipv6_supported && IS_NULL(fd1Obj))) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "socket closed"); return; @@ -460,6 +461,7 @@ return; } else { address = getInetAddress_addr(env, addressObj); + JNU_CHECK_EXCEPTION(env); } if (NET_InetAddressToSockaddr(env, addressObj, port, (struct sockaddr *)&lcladdr, &lcladdrlen, JNI_FALSE) != 0) { @@ -560,8 +562,9 @@ } addr = getInetAddress_addr(env, address); - + JNU_CHECK_EXCEPTION(env); family = getInetAddress_family(env, address); + JNU_CHECK_EXCEPTION(env); if (family == IPv6 && !ipv6_supported) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Protocol family not supported"); @@ -678,6 +681,7 @@ } family = getInetAddress_family(env, iaObj); + JNU_CHECK_EXCEPTION(env); if (family == IPv4) { fdObj = (*env)->GetObjectField(env, this, pdsi_fdID); } else { @@ -722,6 +726,7 @@ * Check is not necessary on these OSes */ if (connected) { address = getInetAddress_addr(env, iaObj); + JNU_CHECK_EXCEPTION(env); } else { address = ntohl(rmtaddr.him4.sin_addr.s_addr); } @@ -831,6 +836,7 @@ JNU_ThrowNullPointerException(env, "Null address in peek()"); } else { address = getInetAddress_addr(env, addressObj); + JNU_CHECK_EXCEPTION_RETURN(env, -1); /* We only handle IPv4 for now. Will support IPv6 once its in the os */ family = AF_INET; } @@ -913,7 +919,9 @@ return 0; } setInetAddress_addr(env, addressObj, ntohl(remote_addr.sin_addr.s_addr)); + JNU_CHECK_EXCEPTION_RETURN(env, -1); setInetAddress_family(env, addressObj, IPv4); + JNU_CHECK_EXCEPTION_RETURN(env, -1); /* return port */ return ntohs(remote_addr.sin_port); @@ -1608,6 +1616,7 @@ int fam; addr = (*env)->GetObjectArrayElement(env, addrArray, i); fam = getInetAddress_family(env, addr); + JNU_CHECK_EXCEPTION_RETURN(env, -1); if (fam == family) { *iaddr = addr; return 0; @@ -1626,6 +1635,7 @@ } iaddr->s_addr = htonl(getInetAddress_addr(env, addr)); + JNU_CHECK_EXCEPTION_RETURN(env, -1); return 0; } @@ -1703,6 +1713,7 @@ struct in_addr in; in.s_addr = htonl(getInetAddress_addr(env, value)); + JNU_CHECK_EXCEPTION(env); if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (const char*)&in, sizeof(in)) < 0) { @@ -1967,7 +1978,7 @@ CHECK_NULL_RETURN(addr, NULL); setInetAddress_addr(env, addr, ntohl(in.s_addr)); - + JNU_CHECK_EXCEPTION_RETURN(env, NULL); /* * For IP_MULTICAST_IF return InetAddress */ diff -r 015385190f06 -r 81fa2439e257 src/windows/native/java/net/TwoStacksPlainSocketImpl.c --- a/src/windows/native/java/net/TwoStacksPlainSocketImpl.c Thu Feb 01 20:19:42 2018 -0800 +++ b/src/windows/native/java/net/TwoStacksPlainSocketImpl.c Fri Jan 26 09:09:08 2018 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -420,6 +420,7 @@ fd1Obj = (*env)->GetObjectField(env, this, psi_fd1ID); family = getInetAddress_family(env, iaObj); + JNU_CHECK_EXCEPTION(env); if (family == IPv6 && !ipv6_supported) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", @@ -731,7 +732,9 @@ } setInetAddress_addr(env, socketAddressObj, ntohl(him.him4.sin_addr.s_addr)); + JNU_CHECK_EXCEPTION(env); setInetAddress_family(env, socketAddressObj, IPv4); + JNU_CHECK_EXCEPTION(env); (*env)->SetObjectField(env, socket, psi_addressID, socketAddressObj); } else { /* AF_INET6 -> Inet6Address */ @@ -759,6 +762,7 @@ setInet6Address_ipaddress(env, socketAddressObj, (const char *)&him.him6.sin6_addr); setInetAddress_family(env, socketAddressObj, IPv6); + JNU_CHECK_EXCEPTION(env); setInet6Address_scopeid(env, socketAddressObj, him.him6.sin6_scope_id); } /* fields common to AF_INET and AF_INET6 */ diff -r 015385190f06 -r 81fa2439e257 src/windows/native/java/net/net_util_md.c --- a/src/windows/native/java/net/net_util_md.c Thu Feb 01 20:19:42 2018 -0800 +++ b/src/windows/native/java/net/net_util_md.c Fri Jan 26 09:09:08 2018 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -857,6 +857,7 @@ int *len, jboolean v4MappedAddress) { jint family, iafam; iafam = getInetAddress_family(env, iaObj); + JNU_CHECK_EXCEPTION_RETURN(env, -1); family = (iafam == IPv4)? AF_INET : AF_INET6; if (ipv6_available() && !(family == AF_INET && v4MappedAddress == JNI_FALSE)) { struct SOCKADDR_IN6 *him6 = (struct SOCKADDR_IN6 *)him; @@ -867,6 +868,7 @@ if (family == AF_INET) { /* will convert to IPv4-mapped address */ memset((char *) caddr, 0, 16); address = getInetAddress_addr(env, iaObj); + JNU_CHECK_EXCEPTION_RETURN(env, -1); if (address == INADDR_ANY) { /* we would always prefer IPv6 wildcard address caddr[10] = 0xff; @@ -905,6 +907,7 @@ } memset((char *) him4, 0, sizeof(struct sockaddr_in)); address = getInetAddress_addr(env, iaObj); + JNU_CHECK_EXCEPTION_RETURN(env, -1); him4->sin_port = htons((short) port); him4->sin_addr.s_addr = (u_long) htonl(address); him4->sin_family = AF_INET;