--- a/src/java.base/windows/native/libjava/WinNTFileSystem_md.c Tue Jul 17 16:22:26 2018 -0700
+++ b/src/java.base/windows/native/libjava/WinNTFileSystem_md.c Tue Jul 17 17:17:16 2018 -0700
@@ -639,6 +639,7 @@
jstring name;
jclass str_class;
WCHAR *pathbuf;
+ DWORD err;
str_class = JNU_ClassString(env);
CHECK_NULL_RETURN(str_class, NULL);
@@ -700,8 +701,10 @@
len = 0;
maxlen = 16;
rv = (*env)->NewObjectArray(env, maxlen, str_class, NULL);
- if (rv == NULL) // Couldn't allocate an array
+ if (rv == NULL) { // Couldn't allocate an array
+ FindClose(handle);
return NULL;
+ }
/* Scan the directory */
do {
if (!wcscmp(find_data.cFileName, L".")
@@ -709,13 +712,17 @@
continue;
name = (*env)->NewString(env, find_data.cFileName,
(jsize)wcslen(find_data.cFileName));
- if (name == NULL)
- return NULL; // error;
+ if (name == NULL) {
+ FindClose(handle);
+ return NULL; // error
+ }
if (len == maxlen) {
old = rv;
rv = (*env)->NewObjectArray(env, maxlen <<= 1, str_class, NULL);
- if (rv == NULL || JNU_CopyObjectArray(env, rv, old, len) < 0)
+ if (rv == NULL || JNU_CopyObjectArray(env, rv, old, len) < 0) {
+ FindClose(handle);
return NULL; // error
+ }
(*env)->DeleteLocalRef(env, old);
}
(*env)->SetObjectArrayElement(env, rv, len++, name);
@@ -723,9 +730,11 @@
} while (FindNextFileW(handle, &find_data));
- if (GetLastError() != ERROR_NO_MORE_FILES)
+ err = GetLastError();
+ FindClose(handle);
+ if (err != ERROR_NO_MORE_FILES) {
return NULL; // error
- FindClose(handle);
+ }
if (len < maxlen) {
/* Copy the final results into an appropriately-sized array */