Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0edea2f1 authored by Ameer Armaly's avatar Ameer Armaly Committed by Automerger Merge Worker
Browse files

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

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

Change-Id: Id24155c93bfc96747c2d73493477cfdacd28ced6
parents 207052c8 1c405c33
Loading
Loading
Loading
Loading
+32 −1
Original line number Diff line number Diff line
@@ -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.
     */