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

Commit 53dd2129 authored by Michael Groover's avatar Michael Groover Committed by Automerger Merge Worker
Browse files

Merge "Report UnsafeIntentLaunchViolation for Intents parsed from URIs" into sc-dev am: c717ef59

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13765168

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I51229ba123f6f3f3cd559bec2345f42b167e3569
parents 0bb4162f c717ef59
Loading
Loading
Loading
Loading
+26 −1
Original line number Diff line number Diff line
@@ -6761,6 +6761,12 @@ public class Intent implements Parcelable, Cloneable {
     * #putExtras(Bundle)} when the provided Bundle has not been unparceled.
     */
    private static final int LOCAL_FLAG_UNFILTERED_EXTRAS = 1 << 3;

    /**
     * Local flag indicating this instance was created from a {@link Uri}.
     */
    private static final int LOCAL_FLAG_FROM_URI = 1 << 4;

    // ---------------------------------------------------------------------
    // ---------------------------------------------------------------------
    // toUri() and parseUri() options.
@@ -7173,6 +7179,16 @@ public class Intent implements Parcelable, Cloneable {
     * @see #toUri
     */
    public static Intent parseUri(String uri, @UriFlags int flags) throws URISyntaxException {
        Intent intent = parseUriInternal(uri, flags);
        intent.mLocalFlags |= LOCAL_FLAG_FROM_URI;
        return intent;
    }

    /**
     * @see #parseUri(String, int)
     */
    private static Intent parseUriInternal(String uri, @UriFlags int flags)
            throws URISyntaxException {
        int i = 0;
        try {
            final boolean androidApp = uri.startsWith("android-app:");
@@ -7392,7 +7408,9 @@ public class Intent implements Parcelable, Cloneable {
    }

    public static Intent getIntentOld(String uri) throws URISyntaxException {
        return getIntentOld(uri, 0);
        Intent intent = getIntentOld(uri, 0);
        intent.mLocalFlags |= LOCAL_FLAG_FROM_URI;
        return intent;
    }

    private static Intent getIntentOld(String uri, int flags) throws URISyntaxException {
@@ -11353,6 +11371,13 @@ public class Intent implements Parcelable, Cloneable {
                StrictMode.onUnsafeIntentLaunch(this);
            } else if ((mLocalFlags & LOCAL_FLAG_UNFILTERED_EXTRAS) != 0) {
                StrictMode.onUnsafeIntentLaunch(this);
            } else if ((mLocalFlags & LOCAL_FLAG_FROM_URI) != 0
                    && !(mCategories != null && mCategories.contains(CATEGORY_BROWSABLE)
                        && mComponent == null)) {
                // Since the docs for #URI_ALLOW_UNSAFE recommend setting the category to browsable
                // for an implicit Intent parsed from a URI a violation should be reported if these
                // conditions are not met.
                StrictMode.onUnsafeIntentLaunch(this);
            }
        }
    }