summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHenrik Baard <henrik.baard@sonymobile.com>2015-07-03 08:26:12 +0200
committerNarayan Kamath <narayan@google.com>2015-07-09 12:19:16 +0000
commit86b0aaf71b504d7b28563b7a28e626edfb81b1b9 (patch)
tree05fa63e44a7ce9d016f36f8e4aab067f95fb1d58
parentb0c36a9e49578885ff709f6bde0e2fb83e3d15d7 (diff)
downloadwifi-86b0aaf71b504d7b28563b7a28e626edfb81b1b9.tar.gz
Fix memory leak in WifiNativeandroid-m-preview-2
String created with GetStringUTFChars is not released causing a memory leak. Use ScopedUtfChars instead to ensure that memory is released. GetByteArrayElements does not free allocated memory, call ReleaseByteArrayElements to free up memory. Change-Id: Ifd5330fa4cf190818319a7899de0cc5e2ccb2a53
-rw-r--r--service/jni/com_android_server_wifi_WifiNative.cpp22
1 files changed, 12 insertions, 10 deletions
diff --git a/service/jni/com_android_server_wifi_WifiNative.cpp b/service/jni/com_android_server_wifi_WifiNative.cpp
index c14fa8dbd..927649bda 100644
--- a/service/jni/com_android_server_wifi_WifiNative.cpp
+++ b/service/jni/com_android_server_wifi_WifiNative.cpp
@@ -539,13 +539,13 @@ static bool parseMacAddress(JNIEnv *env, jobject obj, mac_addr addr) {
return false;
}
- const char *bssid = env->GetStringUTFChars(macAddrString, NULL);
- if (bssid == NULL) {
+ ScopedUtfChars bssid(env, macAddrString);
+ if (bssid.c_str() == NULL) {
ALOGE("Error getting bssid");
return false;
}
- parseMacAddress(bssid, addr);
+ parseMacAddress(bssid.c_str(), addr);
return true;
}
@@ -627,12 +627,12 @@ static jboolean android_net_wifi_setHotlist(
return false;
}
- const char *bssid = env->GetStringUTFChars(macAddrString, NULL);
- if (bssid == NULL) {
+ ScopedUtfChars bssid(env, macAddrString);
+ if (bssid.c_str() == NULL) {
ALOGE("Error getting bssid");
return false;
}
- parseMacAddress(bssid, params.ap[i].bssid);
+ parseMacAddress(bssid.c_str(), params.ap[i].bssid);
mac_addr addr;
memcpy(addr, params.ap[i].bssid, sizeof(mac_addr));
@@ -748,14 +748,14 @@ static jboolean android_net_wifi_trackSignificantWifiChange(
return false;
}
- const char *bssid = env->GetStringUTFChars(macAddrString, NULL);
- if (bssid == NULL) {
+ ScopedUtfChars bssid(env, macAddrString);
+ if (bssid.c_str() == NULL) {
ALOGE("Error getting bssid");
return false;
}
mac_addr addr;
- parseMacAddress(bssid, addr);
+ parseMacAddress(bssid.c_str(), addr);
memcpy(params.ap[i].bssid, addr, sizeof(mac_addr));
char bssidOut[32];
@@ -1021,7 +1021,9 @@ static jboolean android_net_wifi_setScanningMacOui(JNIEnv *env, jclass cls,
return false;
}
- return wifi_set_scanning_mac_oui(handle, (byte *)bytes) == WIFI_SUCCESS;
+ wifi_error ret = wifi_set_scanning_mac_oui(handle, (byte *)bytes);
+ env->ReleaseByteArrayElements(param, bytes, 0);
+ return ret == WIFI_SUCCESS;
}
static jintArray android_net_wifi_getValidChannels(JNIEnv *env, jclass cls,