From 330e263c4af03c6f6413e0199a2e78125ffbc185 Mon Sep 17 00:00:00 2001 From: Gilles Debunne Date: Tue, 5 Oct 2010 11:00:54 -0700 Subject: Fix for IndexOutOfBounds in text pasting. Made paste safe even in case of replace problems due to filters. Bug 3042016 Change-Id: I9be34fa41fa6117502bbd959f91c562f28fb4237 --- core/java/android/widget/TextView.java | 15 +++++++++++---- 1 file 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; } } -- cgit v1.2.3-59-g8ed1b