Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a0364e23 authored by Chet Haase's avatar Chet Haase Committed by Android (Google) Code Review
Browse files

Merge "Fix infinite recursion in hashcode of Spannables" into klp-dev

parents 331f9e79 1d3c4b39
Loading
Loading
Loading
Loading
+16 −8
Original line number Original line Diff line number Diff line
@@ -1293,23 +1293,29 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable
    public boolean equals(Object o) {
    public boolean equals(Object o) {
        if (o instanceof Spanned &&
        if (o instanceof Spanned &&
                toString().equals(o.toString())) {
                toString().equals(o.toString())) {
            Spanned other = (Spanned) o;
            // Check span data
            // Check span data
            Object[] otherSpans = ((Spanned) o).getSpans(0,
            Object[] otherSpans = other.getSpans(0, other.length(), Object.class);
                    ((Spanned) o).length(), Object.class);
            if (mSpanCount == otherSpans.length) {
            if (mSpanCount == otherSpans.length) {
                for (int i = 0; i < mSpanCount; ++i) {
                for (int i = 0; i < mSpanCount; ++i) {
                    Object thisSpan = mSpans[i];
                    Object thisSpan = mSpans[i];
                    Object otherSpan = otherSpans[i];
                    Object otherSpan = otherSpans[i];
                    if (!thisSpan.equals(otherSpan) ||
                    if (thisSpan == this) {
                            getSpanStart(thisSpan) != getSpanStart(otherSpan) ||
                        if (other != otherSpan ||
                            getSpanEnd(thisSpan) != getSpanEnd(otherSpan) ||
                                getSpanStart(thisSpan) != other.getSpanStart(otherSpan) ||
                            getSpanFlags(thisSpan) != getSpanFlags(otherSpan)) {
                                getSpanEnd(thisSpan) != other.getSpanEnd(otherSpan) ||
                                getSpanFlags(thisSpan) != other.getSpanFlags(otherSpan)) {
                            return false;
                        }
                    } else if (!thisSpan.equals(otherSpan) ||
                            getSpanStart(thisSpan) != other.getSpanStart(otherSpan) ||
                            getSpanEnd(thisSpan) != other.getSpanEnd(otherSpan) ||
                            getSpanFlags(thisSpan) != other.getSpanFlags(otherSpan)) {
                        return false;
                        return false;
                    }
                    }
                }
                }
                return true;
                return true;
            }
            }

        }
        }
        return false;
        return false;
    }
    }
@@ -1321,7 +1327,9 @@ public class SpannableStringBuilder implements CharSequence, GetChars, Spannable
        hash = hash * 31 + mSpanCount;
        hash = hash * 31 + mSpanCount;
        for (int i = 0; i < mSpanCount; ++i) {
        for (int i = 0; i < mSpanCount; ++i) {
            Object span = mSpans[i];
            Object span = mSpans[i];
            if (span != this) {
                hash = hash * 31 + span.hashCode();
                hash = hash * 31 + span.hashCode();
            }
            hash = hash * 31 + getSpanStart(span);
            hash = hash * 31 + getSpanStart(span);
            hash = hash * 31 + getSpanEnd(span);
            hash = hash * 31 + getSpanEnd(span);
            hash = hash * 31 + getSpanFlags(span);
            hash = hash * 31 + getSpanFlags(span);
+16 −8
Original line number Original line Diff line number Diff line
@@ -363,23 +363,29 @@ import java.lang.reflect.Array;
    public boolean equals(Object o) {
    public boolean equals(Object o) {
        if (o instanceof Spanned &&
        if (o instanceof Spanned &&
                toString().equals(o.toString())) {
                toString().equals(o.toString())) {
            Spanned other = (Spanned) o;
            // Check span data
            // Check span data
            Object[] otherSpans = ((Spanned) o).getSpans(0,
            Object[] otherSpans = other.getSpans(0, other.length(), Object.class);
                    ((Spanned) o).length(), Object.class);
            if (mSpanCount == otherSpans.length) {
            if (mSpanCount == otherSpans.length) {
                for (int i = 0; i < mSpanCount; ++i) {
                for (int i = 0; i < mSpanCount; ++i) {
                    Object thisSpan = mSpans[i];
                    Object thisSpan = mSpans[i];
                    Object otherSpan = otherSpans[i];
                    Object otherSpan = otherSpans[i];
                    if (!thisSpan.equals(otherSpan) ||
                    if (thisSpan == this) {
                            getSpanStart(thisSpan) != getSpanStart(otherSpan) ||
                        if (other != otherSpan ||
                            getSpanEnd(thisSpan) != getSpanEnd(otherSpan) ||
                                getSpanStart(thisSpan) != other.getSpanStart(otherSpan) ||
                            getSpanFlags(thisSpan) != getSpanFlags(otherSpan)) {
                                getSpanEnd(thisSpan) != other.getSpanEnd(otherSpan) ||
                                getSpanFlags(thisSpan) != other.getSpanFlags(otherSpan)) {
                            return false;
                        }
                    } else if (!thisSpan.equals(otherSpan) ||
                            getSpanStart(thisSpan) != other.getSpanStart(otherSpan) ||
                            getSpanEnd(thisSpan) != other.getSpanEnd(otherSpan) ||
                            getSpanFlags(thisSpan) != other.getSpanFlags(otherSpan)) {
                        return false;
                        return false;
                    }
                    }
                }
                }
                return true;
                return true;
            }
            }

        }
        }
        return false;
        return false;
    }
    }
@@ -391,7 +397,9 @@ import java.lang.reflect.Array;
        hash = hash * 31 + mSpanCount;
        hash = hash * 31 + mSpanCount;
        for (int i = 0; i < mSpanCount; ++i) {
        for (int i = 0; i < mSpanCount; ++i) {
            Object span = mSpans[i];
            Object span = mSpans[i];
            if (span != this) {
                hash = hash * 31 + span.hashCode();
                hash = hash * 31 + span.hashCode();
            }
            hash = hash * 31 + getSpanStart(span);
            hash = hash * 31 + getSpanStart(span);
            hash = hash * 31 + getSpanEnd(span);
            hash = hash * 31 + getSpanEnd(span);
            hash = hash * 31 + getSpanFlags(span);
            hash = hash * 31 + getSpanFlags(span);