Merge "Handle cases where exceptions may be thrown." am: a0d573ecd4 am: eccc13728f am: a4d8e2e5b6
Original change: https://android-review.googlesource.com/c/platform/libnativehelper/+/2430694
Change-Id: Iaafa2850624b1cee5cb2823eae91ea958b955f20
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/JNIHelp.c b/JNIHelp.c
index fba7f8d..cb008a6 100644
--- a/JNIHelp.c
+++ b/JNIHelp.c
@@ -100,14 +100,16 @@
(*env)->DeleteLocalRef(env, className);
className = NULL;
+ bool success = false;
jmethodID getMessage =
FindMethod(env, "java/lang/Throwable", "getMessage", "()Ljava/lang/String;");
jstring message = (jstring) (*env)->CallObjectMethod(env, thrown, getMessage);
- if (message == NULL) {
- return true;
+ if (message != NULL) {
+ success = (ExpandableStringAppend(dst, ": ") && AppendJString(env, message, dst));
+ } else if ((*env)->ExceptionOccurred(env) == NULL) {
+ success = true;
}
- bool success = (ExpandableStringAppend(dst, ": ") && AppendJString(env, message, dst));
if (!success) {
// Two potential reasons for reaching here:
//
@@ -169,7 +171,7 @@
FindMethod(env, "java/lang/Throwable", "printStackTrace", "(Ljava/io/PrintWriter;)V");
(*env)->CallVoidMethod(env, thrown, printStackTrace, pw);
- jstring trace = StringWriterToString(env, sw);
+ jstring trace = ((*env)->ExceptionOccurred(env) != NULL) ? NULL : StringWriterToString(env, sw);
(*env)->DeleteLocalRef(env, pw);
pw = NULL;