8280414: Memory leak in DefaultProxySelector

Reviewed-by: dfuchs
This commit is contained in:
Daniel Jeliński 2022-01-25 14:41:41 +00:00 committed by Daniel Fuchs
parent 496baada10
commit fe77250fa4

View file

@ -104,7 +104,6 @@ static int createProxyList(LPWSTR win_proxy, const WCHAR *pproto, list_item **he
int nr_elems = 0; int nr_elems = 0;
wchar_t *context = NULL; wchar_t *context = NULL;
wchar_t *current_proxy = NULL; wchar_t *current_proxy = NULL;
BOOL error = FALSE;
/* /*
* The proxy server list contains one or more of the following strings * The proxy server list contains one or more of the following strings
@ -116,7 +115,6 @@ static int createProxyList(LPWSTR win_proxy, const WCHAR *pproto, list_item **he
LPWSTR pport; LPWSTR pport;
LPWSTR phost; LPWSTR phost;
int portVal = 0; int portVal = 0;
wchar_t *next_proxy = NULL;
list_item *proxy = NULL; list_item *proxy = NULL;
wchar_t* pos = NULL; wchar_t* pos = NULL;
@ -292,7 +290,6 @@ Java_sun_net_spi_DefaultProxySelector_getSystemProxies(JNIEnv *env,
} }
if (win_proxy != NULL) { if (win_proxy != NULL) {
wchar_t *context = NULL;
int defport = 0; int defport = 0;
int nr_elems = 0; int nr_elems = 0;
@ -315,27 +312,28 @@ Java_sun_net_spi_DefaultProxySelector_getSystemProxies(JNIEnv *env,
nr_elems = createProxyList(win_proxy, lpProto, &head); nr_elems = createProxyList(win_proxy, lpProto, &head);
if (nr_elems != 0 && head != NULL) { if (nr_elems != 0 && head != NULL) {
int index = 0; int index = 0;
list_item *current = head;
proxy_array = (*env)->NewObjectArray(env, nr_elems, proxy_class, NULL); proxy_array = (*env)->NewObjectArray(env, nr_elems, proxy_class, NULL);
if (proxy_array == NULL || (*env)->ExceptionCheck(env)) { if (proxy_array == NULL || (*env)->ExceptionCheck(env)) {
goto noproxy; goto noproxy;
} }
while (head != NULL && index < nr_elems) { while (current != NULL && index < nr_elems) {
jstring jhost; jstring jhost;
jobject isa; jobject isa;
jobject proxy; jobject proxy;
if (head->host != NULL && proxy_array != NULL) { if (current->host != NULL && proxy_array != NULL) {
/* Let's create the appropriate Proxy object then. */ /* Let's create the appropriate Proxy object then. */
if (head->port == 0) { if (current->port == 0) {
head->port = defport; current->port = defport;
} }
jhost = (*env)->NewString(env, head->host, (jsize)wcslen(head->host)); jhost = (*env)->NewString(env, current->host, (jsize)wcslen(current->host));
if (jhost == NULL || (*env)->ExceptionCheck(env)) { if (jhost == NULL || (*env)->ExceptionCheck(env)) {
proxy_array = NULL; proxy_array = NULL;
} }
isa = (*env)->CallStaticObjectMethod(env, isaddr_class, isa = (*env)->CallStaticObjectMethod(env, isaddr_class,
isaddr_createUnresolvedID, jhost, isaddr_createUnresolvedID, jhost,
head->port); current->port);
if (isa == NULL || (*env)->ExceptionCheck(env)) { if (isa == NULL || (*env)->ExceptionCheck(env)) {
proxy_array = NULL; proxy_array = NULL;
} }
@ -349,7 +347,7 @@ Java_sun_net_spi_DefaultProxySelector_getSystemProxies(JNIEnv *env,
} }
index++; index++;
} }
head = head->next; current = current->next;
} }
} }
} }