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;