Handle bad package name arguments sensically

Don't blithly go ahead and assume package name arguments are non-null,
and don't continue to do a bunch of work after an early failure on
invalid non-null package names.

Bug 13745101

Change-Id: I12ccae343066b39162dedeb46dc58869f55be0ba
This commit is contained in:
Christopher Tate
2014-04-01 10:49:33 -07:00
parent 1dbede1c79
commit f74aa094b4

View File

@@ -700,7 +700,7 @@ public class PackageManagerService extends IPackageManager.Stub {
// Just post MCS_BOUND message to trigger processing // Just post MCS_BOUND message to trigger processing
// of next pending install. // of next pending install.
if (DEBUG_SD_INSTALL) Log.i(TAG, if (DEBUG_SD_INSTALL) Log.i(TAG,
"Posting MCS_BOUND for next woek"); "Posting MCS_BOUND for next work");
mHandler.sendEmptyMessage(MCS_BOUND); mHandler.sendEmptyMessage(MCS_BOUND);
} }
} }
@@ -7533,32 +7533,34 @@ public class PackageManagerService extends IPackageManager.Stub {
mSuccess = getPackageSizeInfoLI(mStats.packageName, mStats.userHandle, mStats); mSuccess = getPackageSizeInfoLI(mStats.packageName, mStats.userHandle, mStats);
} }
final boolean mounted; if (mSuccess) {
if (Environment.isExternalStorageEmulated()) { final boolean mounted;
mounted = true; if (Environment.isExternalStorageEmulated()) {
} else { mounted = true;
final String status = Environment.getExternalStorageState(); } else {
mounted = (Environment.MEDIA_MOUNTED.equals(status) final String status = Environment.getExternalStorageState();
|| Environment.MEDIA_MOUNTED_READ_ONLY.equals(status)); mounted = (Environment.MEDIA_MOUNTED.equals(status)
} || Environment.MEDIA_MOUNTED_READ_ONLY.equals(status));
}
if (mounted) { if (mounted) {
final UserEnvironment userEnv = new UserEnvironment(mStats.userHandle); final UserEnvironment userEnv = new UserEnvironment(mStats.userHandle);
mStats.externalCacheSize = calculateDirectorySize(mContainerService, mStats.externalCacheSize = calculateDirectorySize(mContainerService,
userEnv.buildExternalStorageAppCacheDirs(mStats.packageName)); userEnv.buildExternalStorageAppCacheDirs(mStats.packageName));
mStats.externalDataSize = calculateDirectorySize(mContainerService, mStats.externalDataSize = calculateDirectorySize(mContainerService,
userEnv.buildExternalStorageAppDataDirs(mStats.packageName)); userEnv.buildExternalStorageAppDataDirs(mStats.packageName));
// Always subtract cache size, since it's a subdirectory // Always subtract cache size, since it's a subdirectory
mStats.externalDataSize -= mStats.externalCacheSize; mStats.externalDataSize -= mStats.externalCacheSize;
mStats.externalMediaSize = calculateDirectorySize(mContainerService, mStats.externalMediaSize = calculateDirectorySize(mContainerService,
userEnv.buildExternalStorageAppMediaDirs(mStats.packageName)); userEnv.buildExternalStorageAppMediaDirs(mStats.packageName));
mStats.externalObbSize = calculateDirectorySize(mContainerService, mStats.externalObbSize = calculateDirectorySize(mContainerService,
userEnv.buildExternalStorageAppObbDirs(mStats.packageName)); userEnv.buildExternalStorageAppObbDirs(mStats.packageName));
}
} }
} }
@@ -10271,6 +10273,9 @@ public class PackageManagerService extends IPackageManager.Stub {
final IPackageStatsObserver observer) { final IPackageStatsObserver observer) {
mContext.enforceCallingOrSelfPermission( mContext.enforceCallingOrSelfPermission(
android.Manifest.permission.GET_PACKAGE_SIZE, null); android.Manifest.permission.GET_PACKAGE_SIZE, null);
if (packageName == null) {
throw new IllegalArgumentException("Attempt to get size of null packageName");
}
PackageStats stats = new PackageStats(packageName, userHandle); PackageStats stats = new PackageStats(packageName, userHandle);