summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Kenny Root <kroot@google.com> 2010-09-01 13:44:11 -0700
committer Kenny Root <kroot@google.com> 2010-09-01 14:10:36 -0700
commit7c1bd7fdbf9ac539c9832693b403511b2fc7bac7 (patch)
tree94709083ad4790f053717189587c326f74c50f42
parentfca5677aeefc3b9cbaecefbb10d5ccbaff974391 (diff)
Fix logic error in downgrade of system apps
A logic error would allow not deleting data when uninstalling a system app upgrade that's of a newer release than the on on the system partition. If the system app had a database upgrade and this happened, you might be in trouble. Luckily it appears no one ever does this in code. You'd have to manually get there doing: adb uninstall -k updated.system.package Change-Id: I3110fedf2d147975a0635c71898d985dd642a2c1
-rw-r--r--services/java/com/android/server/PackageManagerService.java13
1 files changed, 5 insertions, 8 deletions
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index 387f458a7106..1141fdcea7be 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -6181,18 +6181,15 @@ class PackageManagerService extends IPackageManager.Stub {
}
// Delete the updated package
outInfo.isRemovedPackageSystemUpdate = true;
- boolean deleteCodeAndResources = false;
- if (ps.versionCode < p.mVersionCode) {
+ final boolean deleteCodeAndResources;
+ if (ps.versionCode < p.mVersionCode) {
// Delete code and resources for downgrades
deleteCodeAndResources = true;
- if ((flags & PackageManager.DONT_DELETE_DATA) == 0) {
- flags &= ~PackageManager.DONT_DELETE_DATA;
- }
+ flags &= ~PackageManager.DONT_DELETE_DATA;
} else {
// Preserve data by setting flag
- if ((flags & PackageManager.DONT_DELETE_DATA) == 0) {
- flags |= PackageManager.DONT_DELETE_DATA;
- }
+ deleteCodeAndResources = false;
+ flags |= PackageManager.DONT_DELETE_DATA;
}
boolean ret = deleteInstalledPackageLI(p, deleteCodeAndResources, flags, outInfo);
if (!ret) {