diff options
| author | Android Build Merger (Role) <noreply-android-build-merger@google.com> | 2018-05-22 21:59:39 +0000 |
|---|---|---|
| committer | Android Build Merger (Role) <noreply-android-build-merger@google.com> | 2018-05-22 21:59:39 +0000 |
| commit | 6be1d6713fff67cc77bc54d22e21cdf693f64f0e (patch) | |
| tree | 4f081dfc39411cd97403a6fa5aeb0d46e67ffa29 /core/java/android | |
| parent | 0d7979fbd4baa4767401060fe0db237361d2697c (diff) | |
| parent | 46f4563313b26bc14b76d578d8cbfa57a3044893 (diff) | |
[automerger] Make safe label more safe am: 2263da9539 am: 05086b1008 am: 77f449068a am: 46f4563313
Change-Id: I49cbda7a4d9643808cc9c164970a6ee630b2233c
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/content/pm/PackageItemInfo.java | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/core/java/android/content/pm/PackageItemInfo.java b/core/java/android/content/pm/PackageItemInfo.java index bc79f41b1fc1..73ae83e32f68 100644 --- a/core/java/android/content/pm/PackageItemInfo.java +++ b/core/java/android/content/pm/PackageItemInfo.java @@ -46,6 +46,9 @@ import java.util.Comparator; */ public class PackageItemInfo { private static final float MAX_LABEL_SIZE_PX = 500f; + /** The maximum length of a safe label, in characters */ + private static final int MAX_SAFE_LABEL_LENGTH = 50000; + /** * Public name of this item. From the "android:name" attribute. */ @@ -173,7 +176,8 @@ public class PackageItemInfo { // If the label contains new line characters it may push the UI // down to hide a part of it. Labels shouldn't have new line // characters, so just truncate at the first time one is seen. - final int labelLength = labelStr.length(); + final int labelLength = Math.min(labelStr.length(), MAX_SAFE_LABEL_LENGTH); + final StringBuffer sb = new StringBuffer(labelLength); int offset = 0; while (offset < labelLength) { final int codePoint = labelStr.codePointAt(offset); @@ -185,14 +189,19 @@ public class PackageItemInfo { break; } // replace all non-break space to " " in order to be trimmed + final int charCount = Character.charCount(codePoint); if (type == Character.SPACE_SEPARATOR) { - labelStr = labelStr.substring(0, offset) + " " + labelStr.substring(offset + - Character.charCount(codePoint)); + sb.append(' '); + } else { + sb.append(labelStr.charAt(offset)); + if (charCount == 2) { + sb.append(labelStr.charAt(offset + 1)); + } } - offset += Character.charCount(codePoint); + offset += charCount; } - labelStr = labelStr.trim(); + labelStr = sb.toString().trim(); if (labelStr.isEmpty()) { return packageName; } |
