diff options
author | Suchi Amalapurapu <asuchitra@google.com> | 2010-02-08 16:30:06 -0800 |
---|---|---|
committer | android-build SharedAccount <android-build@sekiwake.mtv.corp.google.com> | 2010-02-10 23:25:59 -0800 |
commit | 9e7ac3ba8405f22c11629091449ff35a06b72055 (patch) | |
tree | c6788155536aa1c3d7416bf1d1422590de257d6c | |
parent | 84577675292b7d6f29f8f90dae7bae4078b833bb (diff) | |
download | base-9e7ac3ba8405f22c11629091449ff35a06b72055.tar.gz |
Add null checks when scanning a package.
Delete packages whose code and resource paths haven't been set
correctly.
-rw-r--r-- | services/java/com/android/server/PackageManagerService.java | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index 86504a095daf..6df9f2ba47d9 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -1977,6 +1977,12 @@ class PackageManagerService extends IPackageManager.Stub { } PackageParser.Package pkg = scanPackageLI(file, file, resFile, flags|PackageParser.PARSE_MUST_BE_APK, scanMode); + // Don't mess around with apps in system partition. + if (pkg == null && (flags & PackageParser.PARSE_IS_SYSTEM) == 0) { + // Delete the apk + Log.w(TAG, "Cleaning up failed install of " + file); + file.delete(); + } } } @@ -2171,6 +2177,13 @@ class PackageManagerService extends IPackageManager.Stub { File scanFile, File destCodeFile, File destResourceFile, PackageParser.Package pkg, int parseFlags, int scanMode) { + if (scanFile == null || destCodeFile == null || + destResourceFile == null) { + // Bail out. The resource and code paths haven't been set. + Log.w(TAG, " Code and resource paths haven't been set correctly"); + mLastScanError = PackageManager.INSTALL_FAILED_INVALID_APK; + return null; + } mScanningPath = scanFile; if (pkg == null) { mLastScanError = PackageManager.INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME; |