OSDN Git Service

SpannableStringBuilder.getSpans returns array with null values.
authorSiyamed Sinir <siyamed@google.com>
Mon, 25 Jan 2016 18:55:59 +0000 (10:55 -0800)
committerSiyamed Sinir <siyamed@google.com>
Mon, 25 Jan 2016 19:32:37 +0000 (11:32 -0800)
This CL fixes the case where SpannableStringBuilder.getSpans call
forgot to check the case where sort is false, and the span priority
is not set.

Bug: 26761571

Change-Id: I3a548b9c01768e6977a0ff15d6ecb8ca9ec3c075

core/java/android/text/SpannableStringBuilder.java

index e34560b..787202e 100644 (file)
@@ -965,10 +965,10 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable
                         (spanStart != queryEnd && spanEnd != queryStart)) &&
                         (Object.class == kind || kind.isInstance(mSpans[i]))) {
                 int spanPriority = mSpanFlags[i] & SPAN_PRIORITY;
-                if(sort) {
-                    ret[count] = (T) mSpans[i];
-                    priority[count] = spanPriority;
-                    insertionOrder[count] = mSpanOrder[i];
+                int target = count;
+                if (sort) {
+                    priority[target] = spanPriority;
+                    insertionOrder[target] = mSpanOrder[i];
                 } else if (spanPriority != 0) {
                     //insertion sort for elements with priority
                     int j = 0;
@@ -977,8 +977,9 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable
                         if (spanPriority > p) break;
                     }
                     System.arraycopy(ret, j, ret, j + 1, count - j);
-                    ret[j] = (T) mSpans[i];
+                    target = j;
                 }
+                ret[target] = (T) mSpans[i];
                 count++;
             }
             if (count < ret.length && (i & 1) != 0) {