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

Commit 6e8a601c authored by Pinyao Ting's avatar Pinyao Ting Committed by Automerger Merge Worker
Browse files

Merge "Validate URI-based shortcut icon at creation time." into udc-qpr-dev...

Merge "Validate URI-based shortcut icon at creation time." into udc-qpr-dev am: 0dd1726e am: 3d000499

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



Change-Id: I18c28ea75fd37e97522d1e0921e1a576a83d3255
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 1cd76524 3d000499
Loading
Loading
Loading
Loading
+22 −0
Original line number Original line Diff line number Diff line
@@ -37,6 +37,7 @@ import android.app.usage.UsageStatsManagerInternal;
import android.appwidget.AppWidgetProviderInfo;
import android.appwidget.AppWidgetProviderInfo;
import android.content.BroadcastReceiver;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ComponentName;
import android.content.ContentProvider;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter;
@@ -1927,11 +1928,32 @@ public class ShortcutService extends IShortcutService.Stub {
        }
        }
        if (shortcut.getIcon() != null) {
        if (shortcut.getIcon() != null) {
            ShortcutInfo.validateIcon(shortcut.getIcon());
            ShortcutInfo.validateIcon(shortcut.getIcon());
            validateIconURI(shortcut);
        }
        }


        shortcut.replaceFlags(shortcut.getFlags() & ShortcutInfo.FLAG_LONG_LIVED);
        shortcut.replaceFlags(shortcut.getFlags() & ShortcutInfo.FLAG_LONG_LIVED);
    }
    }


    // Validates the calling process has permission to access shortcut icon's image uri
    private void validateIconURI(@NonNull final ShortcutInfo si) {
        final int callingUid = injectBinderCallingUid();
        final Icon icon = si.getIcon();
        if (icon == null) {
            // There's no icon in this shortcut, nothing to validate here.
            return;
        }
        int iconType = icon.getType();
        if (iconType != Icon.TYPE_URI && iconType != Icon.TYPE_URI_ADAPTIVE_BITMAP) {
            // The icon is not URI-based, nothing to validate.
            return;
        }
        final Uri uri = icon.getUri();
        mUriGrantsManagerInternal.checkGrantUriPermission(callingUid, si.getPackage(),
                ContentProvider.getUriWithoutUserId(uri),
                Intent.FLAG_GRANT_READ_URI_PERMISSION,
                ContentProvider.getUserIdFromUri(uri, UserHandle.getUserId(callingUid)));
    }

    private void fixUpIncomingShortcutInfo(@NonNull ShortcutInfo shortcut, boolean forUpdate) {
    private void fixUpIncomingShortcutInfo(@NonNull ShortcutInfo shortcut, boolean forUpdate) {
        fixUpIncomingShortcutInfo(shortcut, forUpdate, /*forPinRequest=*/ false);
        fixUpIncomingShortcutInfo(shortcut, forUpdate, /*forPinRequest=*/ false);
    }
    }