summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jacky Kao <jackykao@google.com> 2021-04-07 02:29:52 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2021-04-07 02:29:52 +0000
commit4563f9dfb59c74315fce5862850f971924b03ab0 (patch)
treeccf2d9fed70b0aa67bafd2b7f17b5bbeb65a5eaa
parent7277d358971ef41846976a5492de32ff46093cb3 (diff)
parentbd462745f5c881b8ab904d0ba6d820b54e5f9047 (diff)
Merge "Limitation the text location length of the A11y node" into sc-dev
-rw-r--r--core/api/current.txt1
-rw-r--r--core/java/android/view/accessibility/AccessibilityNodeInfo.java15
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);
}