diff options
| author | 2012-09-14 10:26:16 -0700 | |
|---|---|---|
| committer | 2012-09-14 10:34:21 -0700 | |
| commit | 0b2fa8ca2238de575fc5cf32f28a92a7d422faef (patch) | |
| tree | 4548ce53ac7a65d15d509c904e8bc2238db90824 | |
| parent | 34186480640f55aa4bd3c9bdf5319b906525fba2 (diff) | |
Don't prematurely delete temporary files
When verification and encryption is used, the temporary file was deleted
prematurely.
Also, on next boot-up, scan the directory we use for temporary files to
clean them up if the user rebooted in the middle of installation.
Bug: 7132197
Change-Id: Ic9e8aab9a664ca00d9ac16f72e53fc43d78d21bc
| -rw-r--r-- | services/java/com/android/server/pm/PackageManagerService.java | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index fe5889ded097..e208068ec60e 100644 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -6334,7 +6334,8 @@ public class PackageManagerService extends IPackageManager.Stub { packageFile = mTempPackage; FileUtils.setPermissions(packageFile.getAbsolutePath(), - FileUtils.S_IRUSR | FileUtils.S_IWUSR | FileUtils.S_IROTH, + FileUtils.S_IRUSR | FileUtils.S_IWUSR | FileUtils.S_IRGRP + | FileUtils.S_IROTH, -1, -1); } else { packageFile = null; @@ -6515,12 +6516,12 @@ public class PackageManagerService extends IPackageManager.Stub { // will succeed. if (mArgs != null) { processPendingInstall(mArgs, mRet); - } - if (mTempPackage != null) { - if (!mTempPackage.delete()) { - Slog.w(TAG, "Couldn't delete temporary file: " - + mTempPackage.getAbsolutePath()); + if (mTempPackage != null) { + if (!mTempPackage.delete()) { + Slog.w(TAG, "Couldn't delete temporary file: " + + mTempPackage.getAbsolutePath()); + } } } } @@ -7942,17 +7943,23 @@ public class PackageManagerService extends IPackageManager.Stub { } private void deleteTempPackageFiles() { - FilenameFilter filter = new FilenameFilter() { + final FilenameFilter filter = new FilenameFilter() { public boolean accept(File dir, String name) { return name.startsWith("vmdl") && name.endsWith(".tmp"); } }; - String tmpFilesList[] = mAppInstallDir.list(filter); - if(tmpFilesList == null) { + deleteTempPackageFilesInDirectory(mAppInstallDir, filter); + deleteTempPackageFilesInDirectory(mDrmAppPrivateInstallDir, filter); + } + + private static final void deleteTempPackageFilesInDirectory(File directory, + FilenameFilter filter) { + final String[] tmpFilesList = directory.list(filter); + if (tmpFilesList == null) { return; } - for(int i = 0; i < tmpFilesList.length; i++) { - File tmpFile = new File(mAppInstallDir, tmpFilesList[i]); + for (int i = 0; i < tmpFilesList.length; i++) { + final File tmpFile = new File(directory, tmpFilesList[i]); tmpFile.delete(); } } |