Merge "Merge "Careful process validation for unaware providers." into nyc-dev am: 678dba737b" into nyc-mr1-dev

am: 37b78dcdd7

* commit '37b78dcdd7790b758f9031976c7ca615de383c69':
  Careful process validation for unaware providers.

Change-Id: Ibe3cafb6a31be30df823870e3f39dd1e31dfa75a
This commit is contained in:
Jeff Sharkey
2016-05-27 03:24:03 +00:00
committed by android-build-merger

View File

@@ -10170,6 +10170,7 @@ public final class ActivityManagerService extends ActivityManagerNative
int N = providers.size(); int N = providers.size();
app.pubProviders.ensureCapacity(N + app.pubProviders.size()); app.pubProviders.ensureCapacity(N + app.pubProviders.size());
for (int i=0; i<N; i++) { for (int i=0; i<N; i++) {
// TODO: keep logic in sync with installEncryptionUnawareProviders
ProviderInfo cpi = ProviderInfo cpi =
(ProviderInfo)providers.get(i); (ProviderInfo)providers.get(i);
boolean singleton = isSingleton(cpi.processName, cpi.applicationInfo, boolean singleton = isSingleton(cpi.processName, cpi.applicationInfo,
@@ -11150,12 +11151,18 @@ public final class ActivityManagerService extends ActivityManagerNative
final PackageInfo pkgInfo = AppGlobals.getPackageManager() final PackageInfo pkgInfo = AppGlobals.getPackageManager()
.getPackageInfo(pkgName, matchFlags, userId); .getPackageInfo(pkgName, matchFlags, userId);
if (pkgInfo != null && !ArrayUtils.isEmpty(pkgInfo.providers)) { if (pkgInfo != null && !ArrayUtils.isEmpty(pkgInfo.providers)) {
for (ProviderInfo provInfo : pkgInfo.providers) { for (ProviderInfo pi : pkgInfo.providers) {
if (Objects.equals(provInfo.processName, app.processName)) { // TODO: keep in sync with generateApplicationProvidersLocked
Log.v(TAG, "Installing " + provInfo); final boolean processMatch = Objects.equals(pi.processName,
app.thread.scheduleInstallProvider(provInfo); app.processName) || pi.multiprocess;
final boolean userMatch = isSingleton(pi.processName,
pi.applicationInfo, pi.name, pi.flags)
? (app.userId == UserHandle.USER_SYSTEM) : true;
if (processMatch && userMatch) {
Log.v(TAG, "Installing " + pi);
app.thread.scheduleInstallProvider(pi);
} else { } else {
Log.v(TAG, "Skipping " + provInfo); Log.v(TAG, "Skipping " + pi);
} }
} }
} }