Delete local reference in toStringArray() error paths
Bug: 151443957
Test: Treehugger
Change-Id: I3b6324c92ef80be085f1d31abf84299d6e6eb228
diff --git a/include/nativehelper/toStringArray.h b/include/nativehelper/toStringArray.h
index 8d25974..0ff45ec 100644
--- a/include/nativehelper/toStringArray.h
+++ b/include/nativehelper/toStringArray.h
@@ -26,7 +26,8 @@
template <typename StringVisitor>
jobjectArray toStringArray(JNIEnv* env, size_t count, StringVisitor&& visitor) {
- jobjectArray result = jniCreateStringArray(static_cast<C_JNIEnv*>(&env->functions), count);
+ C_JNIEnv* c_env = static_cast<C_JNIEnv*>(&env->functions);
+ ScopedLocalRef<jobjectArray> result(env, jniCreateStringArray(c_env, count));
if (result == nullptr) {
return nullptr;
}
@@ -35,12 +36,12 @@
if (env->ExceptionCheck()) {
return nullptr;
}
- env->SetObjectArrayElement(result, i, s.get());
+ env->SetObjectArrayElement(result.get(), i, s.get());
if (env->ExceptionCheck()) {
return nullptr;
}
}
- return result;
+ return result.release();
}
inline jobjectArray toStringArray(JNIEnv* env, const std::vector<std::string>& strings) {