summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/Binder.java24
1 files changed, 20 insertions, 4 deletions
diff --git a/core/java/android/os/Binder.java b/core/java/android/os/Binder.java
index 362afba6006f..cb5a31ccd219 100644
--- a/core/java/android/os/Binder.java
+++ b/core/java/android/os/Binder.java
@@ -387,10 +387,26 @@ public class Binder implements IBinder {
}
}
- static void checkParcel(Parcel parcel, String msg) {
+ static void checkParcel(IBinder obj, int code, Parcel parcel, String msg) {
if (parcel.dataSize() >= 800*1024) {
// Trying to send > 800k, this is way too much
- Slog.wtfStack(TAG, msg + parcel.dataSize());
+ StringBuilder sb = new StringBuilder();
+ sb.append(msg);
+ sb.append(": on ");
+ sb.append(obj);
+ sb.append(" calling ");
+ sb.append(code);
+ sb.append(" size ");
+ sb.append(parcel.dataSize());
+ sb.append(" (data: ");
+ parcel.setDataPosition(0);
+ sb.append(parcel.readInt());
+ sb.append(", ");
+ sb.append(parcel.readInt());
+ sb.append(", ");
+ sb.append(parcel.readInt());
+ sb.append(")");
+ Slog.wtfStack(TAG, sb.toString());
}
}
@@ -432,7 +448,7 @@ public class Binder implements IBinder {
reply.writeException(re);
res = true;
}
- checkParcel(reply, "Unreasonably large binder reply buffer: ");
+ checkParcel(this, code, reply, "Unreasonably large binder reply buffer");
reply.recycle();
data.recycle();
return res;
@@ -448,7 +464,7 @@ final class BinderProxy implements IBinder {
}
public boolean transact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {
- Binder.checkParcel(data, "Unreasonably large binder buffer: ");
+ Binder.checkParcel(this, code, data, "Unreasonably large binder buffer");
return transactNative(code, data, reply, flags);
}