Merge "TouchExplorer: log malformed events instead of crashing." into sc-dev

This commit is contained in:
Ameer Armaly 2021-07-15 14:45:36 +00:00 committed by Android (Google) Code Review
commit 1c405c33b0

View File

@ -258,7 +258,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));
@ -1222,6 +1227,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.
*/