summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Gilles Debunne <debunne@google.com> 2010-10-05 11:00:54 -0700
committer Gilles Debunne <debunne@google.com> 2010-10-05 17:33:08 -0700
commit330e263c4af03c6f6413e0199a2e78125ffbc185 (patch)
tree2d06ff87da2edb2ebe4379a01195936e01f7b785
parent930d6c3cd5ad387489eb1d35a38beeafe54166b6 (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.java15
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;
}
}