diff options
| author | 2010-09-01 13:44:11 -0700 | |
|---|---|---|
| committer | 2010-09-01 14:10:36 -0700 | |
| commit | 7c1bd7fdbf9ac539c9832693b403511b2fc7bac7 (patch) | |
| tree | 94709083ad4790f053717189587c326f74c50f42 | |
| parent | fca5677aeefc3b9cbaecefbb10d5ccbaff974391 (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.java | 13 |
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) { |