diff options
| author | 2010-10-05 11:00:54 -0700 | |
|---|---|---|
| committer | 2010-10-05 17:33:08 -0700 | |
| commit | 330e263c4af03c6f6413e0199a2e78125ffbc185 (patch) | |
| tree | 2d06ff87da2edb2ebe4379a01195936e01f7b785 | |
| parent | 930d6c3cd5ad387489eb1d35a38beeafe54166b6 (diff) | |
Fix for IndexOutOfBounds in text pasting.
Made paste safe even in case of replace problems due to filters.
Bug 3042016
Change-Id: I9be34fa41fa6117502bbd959f91c562f28fb4237
| -rw-r--r-- | core/java/android/widget/TextView.java | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 6797ea86ec13..3ac179cba781 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -7485,16 +7485,23 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (Character.isSpaceChar(paste.charAt(0))) { if (min > 0 && Character.isSpaceChar(mTransformed.charAt(min - 1))) { // Two spaces at beginning of paste: remove one + final int originalLength = mText.length(); ((Editable) mText).replace(min - 1, min, ""); - min = min - 1; - max = max - 1; + // Due to filters, there is no garantee that exactly one character was + // removed. Count instead. + final int delta = mText.length() - originalLength; + min += delta; + max += delta; } } else { if (min > 0 && !Character.isSpaceChar(mTransformed.charAt(min - 1))) { // No space at beginning of paste: add one + final int originalLength = mText.length(); ((Editable) mText).replace(min, min, " "); - min = min + 1; - max = max + 1; + // Taking possible filters into account as above. + final int delta = mText.length() - originalLength; + min += delta; + max += delta; } } |