8205342: windows : potential memleaks in getAdapter(s) in NetworkInterface_winXP.c

Reviewed-by: alanb, igerasim, stuefe
This commit is contained in:
Matthias Baesken 2018-06-26 09:17:53 +02:00
parent 27896721a0
commit 7628589694

View file

@ -75,14 +75,8 @@ static int getAdapters (JNIEnv *env, IP_ADAPTER_ADDRESSES **adapters) {
DWORD ret, flags; DWORD ret, flags;
IP_ADAPTER_ADDRESSES *adapterInfo; IP_ADAPTER_ADDRESSES *adapterInfo;
ULONG len; ULONG len;
char *error_msg_buf = NULL;
size_t error_msg_buf_size =
strlen("IP Helper Library GetAdaptersAddresses function failed"
" with error == ") + 10;
int _ret = 0;
int try; int try;
adapterInfo = (IP_ADAPTER_ADDRESSES *) malloc(BUFF_SIZE); adapterInfo = (IP_ADAPTER_ADDRESSES *) malloc(BUFF_SIZE);
if (adapterInfo == NULL) { if (adapterInfo == NULL) {
JNU_ThrowByName(env, "java/lang/OutOfMemoryError", JNU_ThrowByName(env, "java/lang/OutOfMemoryError",
@ -126,21 +120,16 @@ static int getAdapters (JNIEnv *env, IP_ADAPTER_ADDRESSES **adapters) {
"IP Helper Library GetAdaptersAddresses function failed " "IP Helper Library GetAdaptersAddresses function failed "
"with ERROR_ADDRESS_NOT_ASSOCIATED"); "with ERROR_ADDRESS_NOT_ASSOCIATED");
} else { } else {
error_msg_buf = (char *)malloc(error_msg_buf_size); char error_msg_buf[100];
if (error_msg_buf != NULL) { int _sr;
memset(error_msg_buf, 0, error_msg_buf_size); _sr = _snprintf_s(error_msg_buf, sizeof(error_msg_buf),
_ret = _snprintf_s(error_msg_buf, error_msg_buf_size, _TRUNCATE, "IP Helper Library GetAdaptersAddresses "
_TRUNCATE, "IP Helper Library GetAdaptersAddresses " "function failed with error == %d", ret);
"function failed with error == %d", ret); if (_sr != -1) {
if (_ret != -1) { JNU_ThrowByName(env, "java/lang/Error", error_msg_buf);
JNU_ThrowByName(env, "java/lang/Error", error_msg_buf);
} else {
JNU_ThrowByName(env, "java/lang/Error",
"IP Helper Library GetAdaptersAddresses function failure");
}
} else { } else {
JNU_ThrowByName(env, "java/lang/Error", JNU_ThrowByName(env, "java/lang/Error",
"IP Helper Library GetAdaptersAddresses function failed"); "IP Helper Library GetAdaptersAddresses function failure");
} }
} }
return -1; return -1;
@ -158,10 +147,6 @@ IP_ADAPTER_ADDRESSES *getAdapter (JNIEnv *env, jint index) {
DWORD flags, val; DWORD flags, val;
IP_ADAPTER_ADDRESSES *adapterInfo, *ptr, *ret; IP_ADAPTER_ADDRESSES *adapterInfo, *ptr, *ret;
ULONG len; ULONG len;
char *error_msg_buf = NULL;
size_t error_msg_buf_size =
strlen("IP Helper Library GetAdaptersAddresses function failed with error == ") + 10;
int _ret = 0;
int try; int try;
adapterInfo = (IP_ADAPTER_ADDRESSES *) malloc(BUFF_SIZE); adapterInfo = (IP_ADAPTER_ADDRESSES *) malloc(BUFF_SIZE);
if (adapterInfo == NULL) { if (adapterInfo == NULL) {
@ -204,21 +189,16 @@ IP_ADAPTER_ADDRESSES *getAdapter (JNIEnv *env, jint index) {
"IP Helper Library GetAdaptersAddresses function failed " "IP Helper Library GetAdaptersAddresses function failed "
"with ERROR_ADDRESS_NOT_ASSOCIATED"); "with ERROR_ADDRESS_NOT_ASSOCIATED");
} else { } else {
error_msg_buf = (char *)malloc(error_msg_buf_size); char error_msg_buf[100];
if (error_msg_buf != NULL) { int _sr;
memset(error_msg_buf, 0, error_msg_buf_size); _sr = _snprintf_s(error_msg_buf, sizeof(error_msg_buf),
_ret = _snprintf_s(error_msg_buf, error_msg_buf_size, _TRUNCATE, "IP Helper Library GetAdaptersAddresses function failed "
_TRUNCATE, "IP Helper Library GetAdaptersAddresses function failed " "with error == %d", val);
"with error == %d", val); if (_sr != -1) {
if (_ret != -1) { JNU_ThrowByName(env, "java/lang/Error", error_msg_buf);
JNU_ThrowByName(env, "java/lang/Error", error_msg_buf);
} else {
JNU_ThrowByName(env, "java/lang/Error",
"IP Helper Library GetAdaptersAddresses function failure");
}
} else { } else {
JNU_ThrowByName(env, "java/lang/Error", JNU_ThrowByName(env, "java/lang/Error",
"IP Helper Library GetAdaptersAddresses function failed"); "IP Helper Library GetAdaptersAddresses function failure");
} }
} }
return NULL; return NULL;