diff options
author | Henrik Baard <henrik.baard@sonymobile.com> | 2015-07-03 08:26:12 +0200 |
---|---|---|
committer | Narayan Kamath <narayan@google.com> | 2015-07-09 12:19:16 +0000 |
commit | 86b0aaf71b504d7b28563b7a28e626edfb81b1b9 (patch) | |
tree | 05fa63e44a7ce9d016f36f8e4aab067f95fb1d58 | |
parent | b0c36a9e49578885ff709f6bde0e2fb83e3d15d7 (diff) | |
download | wifi-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.cpp | 22 |
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, |