diff -r 5e250ee9259e -r fb91b01624be src/java.base/unix/native/libnio/ch/Net.c --- a/src/java.base/unix/native/libnio/ch/Net.c Thu Nov 14 15:01:49 2019 +0000 +++ b/src/java.base/unix/native/libnio/ch/Net.c Thu Nov 14 17:43:07 2019 +0000 @@ -73,20 +73,25 @@ JNIEXPORT jint JNICALL NET_UnixSocketAddressToSockaddr(JNIEnv *env, jobject uaddr, struct sockaddr_un *sa, int *len) { - jstring path = (*env)->GetObjectField(env, uaddr, udsa_pathID); + jstring path; + memset(sa, 0, sizeof(struct sockaddr_un)); + sa->sun_family = AF_UNIX; + if (uaddr == NULL) { + *len = (int)(offsetof(struct sockaddr_un, sun_path)); + return 0; + } + path = (*env)->GetObjectField(env, uaddr, udsa_pathID); jboolean isCopy; int ret; const char* pname = JNU_GetStringPlatformChars(env, path, &isCopy); - memset(sa, 0, sizeof(struct sockaddr_un)); - sa->sun_family = AF_UNIX; - int name_len = strlen(pname) + 1; /* includes null termination */ + size_t name_len = strlen(pname)+1; if (name_len > MAX_UNIX_DOMAIN_PATH_LEN) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "unix domain path too long"); ret = 1; goto finish; } - strncpy(&sa->sun_path[0], pname, name_len); - *len = offsetof(struct sockaddr_un, sun_path) + name_len; + strncpy(sa->sun_path, pname, name_len); + *len = (int)(offsetof(struct sockaddr_un, sun_path) + name_len); ret = 0; finish: if (isCopy)