aboutsummaryrefslogtreecommitdiff
path: root/src/windows
diff options
context:
space:
mode:
authoraefimov <none@none>2018-08-03 19:50:58 +0100
committeraefimov <none@none>2018-08-03 19:50:58 +0100
commitc4857ece9d7a488d2b26734aaaf57868ae8fbe43 (patch)
tree354cbf9d28c17d1db40ae6a11ee606e5d3c779dc /src/windows
parent53ac3196692ebc71c7e3d10eef49a933d4f579c5 (diff)
parent2c8359e244f09b58faa0e5d70037b0aa15d4d92d (diff)
downloadjdk8u_jdk-c4857ece9d7a488d2b26734aaaf57868ae8fbe43.tar.gz
Merge
Diffstat (limited to 'src/windows')
-rw-r--r--src/windows/classes/sun/awt/shell/Win32ShellFolder2.java7
-rw-r--r--src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java21
-rw-r--r--src/windows/native/java/net/NetworkInterface.c12
-rw-r--r--src/windows/native/java/net/NetworkInterface_winXP.c45
-rw-r--r--src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c1
-rw-r--r--src/windows/native/sun/security/mscapi/security.cpp31
6 files changed, 68 insertions, 49 deletions
diff --git a/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java b/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java
index 0070bd4458..f4a8fa9162 100644
--- a/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java
+++ b/src/windows/classes/sun/awt/shell/Win32ShellFolder2.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2012, 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
@@ -677,7 +677,7 @@ final class Win32ShellFolder2 extends ShellFolder {
}
try {
- return invoke(new Callable<File[]>() {
+ File[] files = invoke(new Callable<File[]>() {
public File[] call() throws InterruptedException {
if (!isDirectory()) {
return null;
@@ -732,6 +732,9 @@ final class Win32ShellFolder2 extends ShellFolder {
: list.toArray(new ShellFolder[list.size()]);
}
}, InterruptedException.class);
+
+ return Win32ShellFolderManager2.checkFiles(files);
+
} catch (InterruptedException e) {
return new File[0];
}
diff --git a/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java b/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java
index 0a0c3fb6ab..add8f731ee 100644
--- a/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java
+++ b/src/windows/classes/sun/awt/shell/Win32ShellFolderManager2.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2003, 2014, 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
@@ -379,21 +379,30 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
return null;
}
- private File checkFile(File file) {
+ private static File checkFile(File file) {
SecurityManager sm = System.getSecurityManager();
return (sm == null || file == null) ? file : checkFile(file, sm);
}
- private File checkFile(File file, SecurityManager sm) {
+ private static File checkFile(File file, SecurityManager sm) {
try {
sm.checkRead(file.getPath());
+
+ if (file instanceof Win32ShellFolder2) {
+ Win32ShellFolder2 f = (Win32ShellFolder2)file;
+ if (f.isLink()) {
+ Win32ShellFolder2 link = (Win32ShellFolder2)f.getLinkLocation();
+ if (link != null)
+ sm.checkRead(link.getPath());
+ }
+ }
return file;
} catch (SecurityException se) {
return null;
}
}
- private File[] checkFiles(File[] files) {
+ static File[] checkFiles(File[] files) {
SecurityManager sm = System.getSecurityManager();
if (sm == null || files == null || files.length == 0) {
return files;
@@ -401,7 +410,7 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
return checkFiles(Arrays.stream(files), sm);
}
- private File[] checkFiles(List<File> files) {
+ private static File[] checkFiles(List<File> files) {
SecurityManager sm = System.getSecurityManager();
if (sm == null || files.isEmpty()) {
return files.toArray(new File[files.size()]);
@@ -409,7 +418,7 @@ public class Win32ShellFolderManager2 extends ShellFolderManager {
return checkFiles(files.stream(), sm);
}
- private File[] checkFiles(Stream<File> filesStream, SecurityManager sm) {
+ private static File[] checkFiles(Stream<File> filesStream, SecurityManager sm) {
return filesStream.filter((file) -> checkFile(file, sm) != null)
.toArray(File[]::new);
}
diff --git a/src/windows/native/java/net/NetworkInterface.c b/src/windows/native/java/net/NetworkInterface.c
index 6b2d05f523..4c6561e7cc 100644
--- a/src/windows/native/java/net/NetworkInterface.c
+++ b/src/windows/native/java/net/NetworkInterface.c
@@ -287,6 +287,7 @@ int enumInterfaces(JNIEnv *env, netif **netifPP)
if (curr->name == NULL || curr->displayName == NULL) {
if (curr->name) free(curr->name);
if (curr->displayName) free(curr->displayName);
+ free(curr);
curr = NULL;
}
}
@@ -593,7 +594,10 @@ jobject createNetworkInterface
/* 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 ((*env)->ExceptionCheck(env)) {
+ free_netaddr(netaddrP);
+ return NULL;
+ }
if (addrs->mask != -1) {
ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID);
if (ibObj == NULL) {
@@ -607,7 +611,10 @@ jobject createNetworkInterface
return NULL;
}
setInetAddress_addr(env, ia2Obj, ntohl(addrs->brdcast.him4.sin_addr.s_addr));
- JNU_CHECK_EXCEPTION_RETURN(env, NULL);
+ if ((*env)->ExceptionCheck(env)) {
+ free_netaddr(netaddrP);
+ return NULL;
+ }
(*env)->SetObjectField(env, ibObj, ni_ibbroadcastID, ia2Obj);
(*env)->SetShortField(env, ibObj, ni_ibmaskID, addrs->mask);
(*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj);
@@ -618,6 +625,7 @@ jobject createNetworkInterface
if (iaObj) {
int ret = setInet6Address_ipaddress(env, iaObj, (jbyte *)&(addrs->addr.him6.sin6_addr.s6_addr));
if (ret == JNI_FALSE) {
+ free_netaddr(netaddrP);
return NULL;
}
diff --git a/src/windows/native/java/net/NetworkInterface_winXP.c b/src/windows/native/java/net/NetworkInterface_winXP.c
index 9f6ba398a2..81dfd1fa38 100644
--- a/src/windows/native/java/net/NetworkInterface_winXP.c
+++ b/src/windows/native/java/net/NetworkInterface_winXP.c
@@ -488,8 +488,9 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs)
jobjectArray addrArr, bindsArr, childArr;
netaddr *addrs;
jint addr_index;
- int netaddrCount=ifs->naddrs;
- netaddr *netaddrP=ifs->addrs;
+ int netaddrCount = ifs->naddrs;
+ netaddr *netaddrP = ifs->addrs;
+ netaddr *netaddrPToFree = NULL;
jint bind_index;
/*
@@ -520,21 +521,23 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs)
* Note that 0 is a valid number of addresses.
*/
if (netaddrCount < 0) {
- netaddrCount = enumAddresses_win(env, ifs, &netaddrP);
+ netaddrCount = enumAddresses_win(env, ifs, &netaddrPToFree);
if (netaddrCount == -1) {
return NULL;
}
+ netaddrP = netaddrPToFree;
}
addrArr = (*env)->NewObjectArray(env, netaddrCount, ia_class, NULL);
if (addrArr == NULL) {
+ free_netaddr(netaddrPToFree);
return NULL;
}
bindsArr = (*env)->NewObjectArray(env, netaddrCount, ni_ibcls, NULL);
if (bindsArr == NULL) {
- free_netaddr(netaddrP);
- return NULL;
+ free_netaddr(netaddrPToFree);
+ return NULL;
}
addrs = netaddrP;
@@ -546,26 +549,32 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs)
if (addrs->addr.him.sa_family == AF_INET) {
iaObj = (*env)->NewObject(env, ia4_class, ia4_ctrID);
if (iaObj == NULL) {
+ free_netaddr(netaddrPToFree);
return NULL;
}
/* 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 ((*env)->ExceptionCheck(env)) {
+ free_netaddr(netaddrPToFree);
+ return NULL;
+ }
ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID);
if (ibObj == NULL) {
- free_netaddr(netaddrP);
- return NULL;
+ free_netaddr(netaddrPToFree);
+ return NULL;
}
(*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj);
ia2Obj = (*env)->NewObject(env, ia4_class, ia4_ctrID);
if (ia2Obj == NULL) {
- free_netaddr(netaddrP);
- return NULL;
+ free_netaddr(netaddrPToFree);
+ return NULL;
}
setInetAddress_addr(env, ia2Obj, ntohl(addrs->brdcast.him4.sin_addr.s_addr));
- JNU_CHECK_EXCEPTION_RETURN(env, NULL);
+ if ((*env)->ExceptionCheck(env)) {
+ free_netaddr(netaddrPToFree);
+ return NULL;
+ }
(*env)->SetObjectField(env, ibObj, ni_ibbroadcastID, ia2Obj);
(*env)->SetShortField(env, ibObj, ni_ibmaskID, addrs->mask);
(*env)->SetObjectArrayElement(env, bindsArr, bind_index++, ibObj);
@@ -574,10 +583,12 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs)
int ret;
iaObj = (*env)->NewObject(env, ia6_class, ia6_ctrID);
if (iaObj == NULL) {
+ free_netaddr(netaddrPToFree);
return NULL;
}
ret = setInet6Address_ipaddress(env, iaObj, (jbyte *)&(addrs->addr.him6.sin6_addr.s6_addr));
if (ret == JNI_FALSE) {
+ free_netaddr(netaddrPToFree);
return NULL;
}
scope = addrs->addr.him6.sin6_scope_id;
@@ -587,8 +598,8 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs)
}
ibObj = (*env)->NewObject(env, ni_ibcls, ni_ibctrID);
if (ibObj == NULL) {
- free_netaddr(netaddrP);
- return NULL;
+ free_netaddr(netaddrPToFree);
+ return NULL;
}
(*env)->SetObjectField(env, ibObj, ni_ibaddressID, iaObj);
(*env)->SetShortField(env, ibObj, ni_ibmaskID, addrs->mask);
@@ -601,6 +612,8 @@ static jobject createNetworkInterfaceXP(JNIEnv *env, netif *ifs)
(*env)->SetObjectField(env, netifObj, ni_addrsID, addrArr);
(*env)->SetObjectField(env, netifObj, ni_bindsID, bindsArr);
+ free_netaddr(netaddrPToFree);
+
/*
* Windows doesn't have virtual interfaces, so child array
* is always empty.
@@ -640,7 +653,7 @@ JNIEXPORT jobject JNICALL Java_java_net_NetworkInterface_getByName0_XP
}
/* if found create a NetworkInterface */
- if (curr != NULL) {;
+ if (curr != NULL) {
netifObj = createNetworkInterfaceXP(env, curr);
}
@@ -767,6 +780,7 @@ JNIEXPORT jobjectArray JNICALL Java_java_net_NetworkInterface_getAll_XP
/* allocate a NetworkInterface array */
netIFArr = (*env)->NewObjectArray(env, count, cls, NULL);
if (netIFArr == NULL) {
+ free_netif(ifList);
return NULL;
}
@@ -781,6 +795,7 @@ JNIEXPORT jobjectArray JNICALL Java_java_net_NetworkInterface_getAll_XP
netifObj = createNetworkInterfaceXP(env, curr);
if (netifObj == NULL) {
+ free_netif(ifList);
return NULL;
}
diff --git a/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c b/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c
index 2b683aaab0..506994904b 100644
--- a/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c
+++ b/src/windows/native/java/net/TwoStacksPlainDatagramSocketImpl.c
@@ -445,7 +445,6 @@ Java_java_net_TwoStacksPlainDatagramSocketImpl_bind0(JNIEnv *env, jobject this,
"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;
diff --git a/src/windows/native/sun/security/mscapi/security.cpp b/src/windows/native/sun/security/mscapi/security.cpp
index 508eabeb66..d3273025e4 100644
--- a/src/windows/native/sun/security/mscapi/security.cpp
+++ b/src/windows/native/sun/security/mscapi/security.cpp
@@ -183,7 +183,6 @@ JNIEXPORT jbyteArray JNICALL Java_sun_security_mscapi_PRNG_generateSeed
{
HCRYPTPROV hCryptProv = NULL;
- BYTE* pbData = NULL;
jbyte* reseedBytes = NULL;
jbyte* seedBytes = NULL;
jbyteArray result = NULL;
@@ -227,28 +226,17 @@ JNIEXPORT jbyteArray JNICALL Java_sun_security_mscapi_PRNG_generateSeed
result = NULL;
- } else if (length > 0) {
-
- pbData = new (env) BYTE[length];
- if (pbData == NULL) {
- __leave;
- }
-
- if (::CryptGenRandom(
- hCryptProv,
- length,
- pbData) == FALSE) {
+ } else {
- ThrowException(env, PROVIDER_EXCEPTION, GetLastError());
- __leave;
+ if (length > 0) {
+ seed = env->NewByteArray(length);
+ if (seed == NULL) {
+ __leave;
+ }
+ } else {
+ length = env->GetArrayLength(seed);
}
- result = env->NewByteArray(length);
- env->SetByteArrayRegion(result, 0, length, (jbyte*) pbData);
-
- } else { // length == 0
-
- length = env->GetArrayLength(seed);
if ((seedBytes = env->GetByteArrayElements(seed, 0)) == NULL) {
__leave;
}
@@ -273,9 +261,6 @@ JNIEXPORT jbyteArray JNICALL Java_sun_security_mscapi_PRNG_generateSeed
if (reseedBytes)
env->ReleaseByteArrayElements(seed, reseedBytes, JNI_ABORT);
- if (pbData)
- delete [] pbData;
-
if (seedBytes)
env->ReleaseByteArrayElements(seed, seedBytes, 0); // update orig