diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 106c8a13cc92..832d94f1a5b5 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -156,6 +156,7 @@ import android.compat.annotation.ChangeId; import android.compat.annotation.EnabledAfter; import android.content.BroadcastReceiver; import android.content.ComponentName; +import android.content.ContentProvider; import android.content.ContentResolver; import android.content.Context; import android.content.IIntentReceiver; @@ -11630,7 +11631,14 @@ public class PackageManagerService extends IPackageManager.Stub int callingUid) { if (!mUserManager.exists(userId)) return null; flags = updateFlagsForComponent(flags, userId); - final ProviderInfo providerInfo = mComponentResolver.queryProvider(name, flags, userId); + + // Callers of this API may not always separate the userID and authority. Let's parse it + // before resolving + String authorityWithoutUserId = ContentProvider.getAuthorityWithoutUserId(name); + userId = ContentProvider.getUserIdFromAuthority(name, userId); + + final ProviderInfo providerInfo = mComponentResolver.queryProvider(authorityWithoutUserId, + flags, userId); boolean checkedGrants = false; if (providerInfo != null) { // Looking for cross-user grants before enforcing the typical cross-users permissions |