diff options
| author | Kristian Monsen <kristianm@google.com> | 2016-03-25 16:42:15 -0700 |
|---|---|---|
| committer | Kristian Monsen <kristianm@google.com> | 2016-03-28 11:04:10 -0700 |
| commit | 1f9dc882a52810940ef2fd0c353f80a57d64356f (patch) | |
| tree | 23684904de3b670f13ef1f0c1b6bf8b030441e57 /core/java/android/view/InputDevice.java | |
| parent | a4d224cc7d03111353fb94b2b2e3d9961b248c6d (diff) | |
Store number of axis in Parcel to prevent infinite loop
BUG=25637534
Change-Id: Id3ca2fe12a4c45280bce65ee60906b8eeb63a530
Diffstat (limited to 'core/java/android/view/InputDevice.java')
| -rw-r--r-- | core/java/android/view/InputDevice.java | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/core/java/android/view/InputDevice.java b/core/java/android/view/InputDevice.java index 88cd7ca71a4e..281ab12df4b7 100644 --- a/core/java/android/view/InputDevice.java +++ b/core/java/android/view/InputDevice.java @@ -383,6 +383,8 @@ public final class InputDevice implements Parcelable { */ public static final int KEYBOARD_TYPE_ALPHABETIC = 2; + private static final int MAX_RANGES = 1000; + public static final Parcelable.Creator<InputDevice> CREATOR = new Parcelable.Creator<InputDevice>() { public InputDevice createFromParcel(Parcel in) { @@ -432,13 +434,14 @@ public final class InputDevice implements Parcelable { mHasButtonUnderPad = in.readInt() != 0; mIdentifier = new InputDeviceIdentifier(mDescriptor, mVendorId, mProductId); - for (;;) { - int axis = in.readInt(); - if (axis < 0) { - break; - } - addMotionRange(axis, in.readInt(), in.readFloat(), in.readFloat(), in.readFloat(), - in.readFloat(), in.readFloat()); + int numRanges = in.readInt(); + if (numRanges > MAX_RANGES) { + numRanges = MAX_RANGES; + } + + for (int i = 0; i < numRanges; i++) { + addMotionRange(in.readInt(), in.readInt(), in.readFloat(), in.readFloat(), + in.readFloat(), in.readFloat(), in.readFloat()); } } @@ -921,6 +924,7 @@ public final class InputDevice implements Parcelable { out.writeInt(mHasButtonUnderPad ? 1 : 0); final int numRanges = mMotionRanges.size(); + out.writeInt(numRanges); for (int i = 0; i < numRanges; i++) { MotionRange range = mMotionRanges.get(i); out.writeInt(range.mAxis); @@ -931,7 +935,6 @@ public final class InputDevice implements Parcelable { out.writeFloat(range.mFuzz); out.writeFloat(range.mResolution); } - out.writeInt(-1); } @Override |
