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

Commit a350e4f1 authored by Alan Viverette's avatar Alan Viverette Committed by Android Git Automerger
Browse files

am 52999685: Merge "Prevent poorly-extended ParcelableSpans from writing to parcels" into mnc-dev

* commit '52999685':
  Prevent poorly-extended ParcelableSpans from writing to parcels
parents b506109b 52999685
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -38,6 +38,11 @@ public class Annotation implements ParcelableSpan {
    }
    
    public int getSpanTypeId() {
        return getSpanTypeIdInternal();
    }

    /** @hide */
    public int getSpanTypeIdInternal() {
        return TextUtils.ANNOTATION;
    }
    
@@ -46,6 +51,11 @@ public class Annotation implements ParcelableSpan {
    }

    public void writeToParcel(Parcel dest, int flags) {
        writeToParcelInternal(dest, flags);
    }

    /** @hide */
    public void writeToParcelInternal(Parcel dest, int flags) {
        dest.writeString(mKey);
        dest.writeString(mValue);
    }
+18 −1
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.text;

import android.os.Parcel;
import android.os.Parcelable;

/**
@@ -27,5 +28,21 @@ public interface ParcelableSpan extends Parcelable {
    /**
     * Return a special type identifier for this span class.
     */
    public abstract int getSpanTypeId();
    int getSpanTypeId();

    /**
     * Internal implementation of {@link #getSpanTypeId()} that is not meant to
     * be overridden outside of the framework.
     *
     * @hide
     */
    int getSpanTypeIdInternal();

    /**
     * Internal implementation of {@link Parcelable#writeToParcel(Parcel, int)}
     * that is not meant to be overridden outside of the framework.
     *
     * @hide
     */
    void writeToParcelInternal(Parcel dest, int flags);
}
+5 −6
Original line number Diff line number Diff line
@@ -622,8 +622,7 @@ public class TextUtils {
     * Flatten a CharSequence and whatever styles can be copied across processes
     * into the parcel.
     */
    public static void writeToParcel(CharSequence cs, Parcel p,
            int parcelableFlags) {
    public static void writeToParcel(CharSequence cs, Parcel p, int parcelableFlags) {
        if (cs instanceof Spanned) {
            p.writeInt(0);
            p.writeString(cs.toString());
@@ -645,15 +644,15 @@ public class TextUtils {
                }

                if (prop instanceof ParcelableSpan) {
                    ParcelableSpan ps = (ParcelableSpan)prop;
                    int spanTypeId = ps.getSpanTypeId();
                    final ParcelableSpan ps = (ParcelableSpan) prop;
                    final int spanTypeId = ps.getSpanTypeIdInternal();
                    if (spanTypeId < FIRST_SPAN || spanTypeId > LAST_SPAN) {
                        Log.e(TAG, "external class \"" + ps.getClass().getSimpleName()
                        Log.e(TAG, "External class \"" + ps.getClass().getSimpleName()
                                + "\" is attempting to use the frameworks-only ParcelableSpan"
                                + " interface");
                    } else {
                        p.writeInt(spanTypeId);
                        ps.writeToParcel(p, parcelableFlags);
                        ps.writeToParcelInternal(p, parcelableFlags);
                        writeWhere(p, sp, o);
                    }
                }
+10 −0
Original line number Diff line number Diff line
@@ -49,6 +49,11 @@ public class AbsoluteSizeSpan extends MetricAffectingSpan implements ParcelableS
    }
    
    public int getSpanTypeId() {
        return getSpanTypeIdInternal();
    }

    /** @hide */
    public int getSpanTypeIdInternal() {
        return TextUtils.ABSOLUTE_SIZE_SPAN;
    }
    
@@ -57,6 +62,11 @@ public class AbsoluteSizeSpan extends MetricAffectingSpan implements ParcelableS
    }

    public void writeToParcel(Parcel dest, int flags) {
        writeToParcelInternal(dest, flags);
    }

    /** @hide */
    public void writeToParcelInternal(Parcel dest, int flags) {
        dest.writeInt(mSize);
        dest.writeInt(mDip ? 1 : 0);
    }
+12 −3
Original line number Diff line number Diff line
@@ -22,10 +22,9 @@ import android.text.ParcelableSpan;
import android.text.TextUtils;

public interface AlignmentSpan extends ParagraphStyle {
    public Layout.Alignment getAlignment();
    Layout.Alignment getAlignment();

    public static class Standard
    implements AlignmentSpan, ParcelableSpan {
    class Standard implements AlignmentSpan, ParcelableSpan {
        public Standard(Layout.Alignment align) {
            mAlignment = align;
        }
@@ -35,6 +34,11 @@ public interface AlignmentSpan extends ParagraphStyle {
        }
        
        public int getSpanTypeId() {
        return getSpanTypeIdInternal();
    }

    /** @hide */
    public int getSpanTypeIdInternal() {
            return TextUtils.ALIGNMENT_SPAN;
        }
        
@@ -43,6 +47,11 @@ public interface AlignmentSpan extends ParagraphStyle {
        }

        public void writeToParcel(Parcel dest, int flags) {
            writeToParcelInternal(dest, flags);
        }

        /** @hide */
        public void writeToParcelInternal(Parcel dest, int flags) {
            dest.writeString(mAlignment.name());
        }

Loading