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

Commit 290d6149 authored by Takamasa Kuramitsu's avatar Takamasa Kuramitsu Committed by android-build-merger
Browse files

Fix crash when loading roots from invalid provider

am: 4a4a8c40

Change-Id: Id8c2c96589e8172a9d5af8050e003ac106b49276
parents 1bb4b2c3 4a4a8c40
Loading
Loading
Loading
Loading
+19 −3
Original line number Diff line number Diff line
@@ -240,10 +240,27 @@ public class ProvidersCache implements ProvidersAccess {
            ContentResolver resolver, String authority, boolean forceRefresh) {
        if (VERBOSE) Log.v(TAG, "Loading roots for " + authority);

        synchronized (mObservedAuthoritiesDetails) {
            if (!mObservedAuthoritiesDetails.containsKey(authority)) {
        final ArrayList<RootInfo> roots = new ArrayList<>();
        ProviderInfo provider = mContext.getPackageManager().resolveContentProvider(
                authority, PackageManager.GET_META_DATA);
        if (!provider.exported) {
            Log.w(TAG, "Provider is not exported. Failed to load roots for " + authority);
            return roots;
        }
        if (!provider.grantUriPermissions) {
            Log.w(TAG, "Provider doesn't grantUriPermissions. Failed to load roots for "
                    + authority);
            return roots;
        }
        if (!android.Manifest.permission.MANAGE_DOCUMENTS.equals(provider.readPermission)
                || !android.Manifest.permission.MANAGE_DOCUMENTS.equals(provider.writePermission)) {
            Log.w(TAG, "Provider is not protected by MANAGE_DOCUMENTS. Failed to load roots for "
                    + authority);
            return roots;
        }

        synchronized (mObservedAuthoritiesDetails) {
            if (!mObservedAuthoritiesDetails.containsKey(authority)) {
                PackageManager pm = mContext.getPackageManager();
                CharSequence appName = pm.getApplicationLabel(provider.applicationInfo);
                String packageName = provider.applicationInfo.packageName;
@@ -274,7 +291,6 @@ public class ProvidersCache implements ProvidersAccess {
            }
        }

        final ArrayList<RootInfo> roots = new ArrayList<>();
        ContentProviderClient client = null;
        Cursor cursor = null;
        try {