Check for exceptions before calling back into Java

This fixes a crash when StrictMode is on and a Binder
call throws an exception.

Bug: 4337406
Change-Id: I5c4d4a8bcd92aa5b0d72b7957578df980cb2a783
This commit is contained in:
Bjorn Bringert
2011-04-26 19:10:58 +01:00
parent 6f026b0fbc
commit 9013ccd9fc

View File

@@ -282,6 +282,16 @@ protected:
code, (int32_t)&data, (int32_t)reply, flags);
jthrowable excep = env->ExceptionOccurred();
if (excep) {
report_exception(env, excep,
"*** Uncaught remote exception! "
"(Exceptions are not yet supported across processes.)");
res = JNI_FALSE;
/* clean up JNI local ref -- we don't return to Java code */
env->DeleteLocalRef(excep);
}
// Restore the Java binder thread's state if it changed while
// processing a call (as it would if the Parcel's header had a
// new policy mask and Parcel.enforceInterface() changed
@@ -294,14 +304,12 @@ protected:
set_dalvik_blockguard_policy(env, strict_policy_before);
}
if (excep) {
report_exception(env, excep,
"*** Uncaught remote exception! "
"(Exceptions are not yet supported across processes.)");
res = JNI_FALSE;
jthrowable excep2 = env->ExceptionOccurred();
if (excep2) {
report_exception(env, excep2,
"*** Uncaught exception in onBinderStrictModePolicyChange");
/* clean up JNI local ref -- we don't return to Java code */
env->DeleteLocalRef(excep);
env->DeleteLocalRef(excep2);
}
//aout << "onTransact to Java code; result=" << res << endl