Merge "TouchExplorer: log malformed events instead of crashing." into sc-dev am: 1c405c33b0 am: 0edea2f14b

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15275875

Change-Id: I27baec67ed7ff96427cdc7b0b8dead4c48806fbd
This commit is contained in:
Ameer Armaly
2021-07-15 15:14:49 +00:00
committed by Automerger Merge Worker

View File

@@ -265,7 +265,12 @@ public class TouchExplorer extends BaseEventStreamTransformation
super.onMotionEvent(event, rawEvent, policyFlags);
return;
}
try {
checkForMalformedEvent(event);
} catch (IllegalArgumentException e) {
Slog.e(LOG_TAG, "Ignoring malformed event: " + event.toString(), e);
return;
}
if (DEBUG) {
Slog.d(LOG_TAG, "Received event: " + event + ", policyFlags=0x"
+ Integer.toHexString(policyFlags));
@@ -1252,6 +1257,32 @@ public class TouchExplorer extends BaseEventStreamTransformation
}
}
/**
* Checks to see whether an event is consistent with itself.
*
* @throws IllegalArgumentException in the case of a malformed event.
*/
private static void checkForMalformedEvent(MotionEvent event) {
if (event.getPointerCount() < 0) {
throw new IllegalArgumentException("Invalid pointer count: " + event.getPointerCount());
}
for (int i = 0; i < event.getPointerCount(); ++i) {
try {
int pointerId = event.getPointerId(i);
float x = event.getX(i);
float y = event.getY(i);
if (Float.isNaN(x) || Float.isNaN(y) || x < 0.0f || y < 0.0f) {
throw new IllegalArgumentException(
"Invalid coordinates: (" + x + ", " + y + ")");
}
} catch (Exception e) {
throw new IllegalArgumentException(
"Encountered exception getting details of pointer " + i + " / "
+ event.getPointerCount(), e);
}
}
}
/**
* Class for delayed sending of hover enter and move events.
*/