summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--services/java/com/android/server/pm/PackageManagerService.java66
1 files changed, 33 insertions, 33 deletions
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java
index 4c26dc5..b97d7fd 100644
--- a/services/java/com/android/server/pm/PackageManagerService.java
+++ b/services/java/com/android/server/pm/PackageManagerService.java
@@ -141,6 +141,7 @@ import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
import libcore.io.ErrnoException;
+import libcore.io.IoUtils;
import libcore.io.Libcore;
/**
@@ -6946,9 +6947,8 @@ public class PackageManagerService extends IPackageManager.Stub {
} catch (IOException e) {
Slog.e(TAG, "Couldn't create a new zip file for the public parts of a" +
" forward-locked app.");
+ destResourceFile.delete();
return PackageManager.INSTALL_FAILED_INSUFFICIENT_STORAGE;
- } finally {
- //TODO clean up the extracted public files
}
retCode = mInstaller.setForwardLockPerm(getApkName(newPackage.mPath),
newPackage.applicationInfo.uid);
@@ -6990,38 +6990,34 @@ public class PackageManagerService extends IPackageManager.Stub {
File publicZipFile) throws IOException {
final FileOutputStream fstr = new FileOutputStream(publicZipFile);
final ZipOutputStream publicZipOutStream = new ZipOutputStream(fstr);
- final ZipFile privateZip = new ZipFile(newPackage.mPath);
-
- // Copy manifest, resources.arsc and res directory to public zip
+ try {
+ final ZipFile privateZip = new ZipFile(newPackage.mPath);
+ try {
+ // Copy manifest, resources.arsc and res directory to public zip
- final Enumeration<? extends ZipEntry> privateZipEntries = privateZip.entries();
- while (privateZipEntries.hasMoreElements()) {
- final ZipEntry zipEntry = privateZipEntries.nextElement();
- final String zipEntryName = zipEntry.getName();
- if ("AndroidManifest.xml".equals(zipEntryName)
- || "resources.arsc".equals(zipEntryName)
- || zipEntryName.startsWith("res/")) {
- try {
- copyZipEntry(zipEntry, privateZip, publicZipOutStream);
- } catch (IOException e) {
- try {
- publicZipOutStream.close();
- throw e;
- } finally {
- publicZipFile.delete();
+ final Enumeration<? extends ZipEntry> privateZipEntries = privateZip.entries();
+ while (privateZipEntries.hasMoreElements()) {
+ final ZipEntry zipEntry = privateZipEntries.nextElement();
+ final String zipEntryName = zipEntry.getName();
+ if ("AndroidManifest.xml".equals(zipEntryName)
+ || "resources.arsc".equals(zipEntryName)
+ || zipEntryName.startsWith("res/")) {
+ copyZipEntry(zipEntry, privateZip, publicZipOutStream);
}
}
+ } finally {
+ try { privateZip.close(); } catch (IOException e) { }
}
- }
- publicZipOutStream.finish();
- publicZipOutStream.flush();
- FileUtils.sync(fstr);
- publicZipOutStream.close();
- FileUtils.setPermissions(
- publicZipFile.getAbsolutePath(),
- FileUtils.S_IRUSR|FileUtils.S_IWUSR|FileUtils.S_IRGRP|FileUtils.S_IROTH,
- -1, -1);
+ publicZipOutStream.finish();
+ publicZipOutStream.flush();
+ FileUtils.sync(fstr);
+ publicZipOutStream.close();
+ FileUtils.setPermissions(publicZipFile.getAbsolutePath(), FileUtils.S_IRUSR
+ | FileUtils.S_IWUSR | FileUtils.S_IRGRP | FileUtils.S_IROTH, -1, -1);
+ } finally {
+ IoUtils.closeQuietly(publicZipOutStream);
+ }
}
private static void copyZipEntry(ZipEntry zipEntry,
@@ -7040,11 +7036,15 @@ public class PackageManagerService extends IPackageManager.Stub {
}
outZipStream.putNextEntry(newEntry);
- InputStream data = inZipFile.getInputStream(zipEntry);
- while ((num = data.read(buffer)) > 0) {
- outZipStream.write(buffer, 0, num);
+ final InputStream data = inZipFile.getInputStream(zipEntry);
+ try {
+ while ((num = data.read(buffer)) > 0) {
+ outZipStream.write(buffer, 0, num);
+ }
+ outZipStream.flush();
+ } finally {
+ IoUtils.closeQuietly(data);
}
- outZipStream.flush();
}
private void deleteTempPackageFiles() {