diff options
author | 2021-04-07 02:29:52 +0000 | |
---|---|---|
committer | 2021-04-07 02:29:52 +0000 | |
commit | 4563f9dfb59c74315fce5862850f971924b03ab0 (patch) | |
tree | ccf2d9fed70b0aa67bafd2b7f17b5bbeb65a5eaa | |
parent | 7277d358971ef41846976a5492de32ff46093cb3 (diff) | |
parent | bd462745f5c881b8ab904d0ba6d820b54e5f9047 (diff) |
Merge "Limitation the text location length of the A11y node" into sc-dev
-rw-r--r-- | core/api/current.txt | 1 | ||||
-rw-r--r-- | core/java/android/view/accessibility/AccessibilityNodeInfo.java | 15 |
2 files changed, 15 insertions, 1 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index bdd0f1758cf5..dac4e0d31618 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -50825,6 +50825,7 @@ package android.view.accessibility { field @NonNull public static final android.os.Parcelable.Creator<android.view.accessibility.AccessibilityNodeInfo> CREATOR; field public static final String EXTRA_DATA_RENDERING_INFO_KEY = "android.view.accessibility.extra.DATA_RENDERING_INFO_KEY"; field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH = "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH"; + field public static final int EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_MAX_LENGTH = 20000; // 0x4e20 field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX = "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX"; field public static final String EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY = "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_KEY"; field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2 diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java index ab46170792a5..1c15bbcc8b57 100644 --- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java +++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java @@ -627,7 +627,7 @@ public class AccessibilityNodeInfo implements Parcelable { /** * Integer argument specifying the end index of the requested text location data. Must be - * positive. + * positive and no larger than {@link #EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH}. * * @see #EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY */ @@ -635,6 +635,11 @@ public class AccessibilityNodeInfo implements Parcelable { "android.view.accessibility.extra.DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH"; /** + * The maximum allowed length of the requested text location data. + */ + public static final int EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_MAX_LENGTH = 20000; + + /** * Key used to request extra data for the rendering information. * The key requests that a {@link AccessibilityNodeInfo.ExtraRenderingInfo} be added to this * info. This request is made with {@link #refreshWithExtraData(String, Bundle)} without @@ -1038,6 +1043,14 @@ public class AccessibilityNodeInfo implements Parcelable { * recycled). */ public boolean refreshWithExtraData(String extraDataKey, Bundle args) { + // limits the text location length to make sure the rectangle array allocation avoids + // the binder transaction failure and OOM crash. + if (args.getInt(EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH, -1) + > EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_MAX_LENGTH) { + args.putInt(EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH, + EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_MAX_LENGTH); + } + args.putString(EXTRA_DATA_REQUESTED_KEY, extraDataKey); return refresh(args, true); } |