diff options
| author | Kenny Root <kroot@google.com> | 2012-04-14 10:13:10 -0700 |
|---|---|---|
| committer | Kenny Root <kroot@google.com> | 2012-04-14 12:23:13 -0700 |
| commit | 3f99afc0d5c25321b870f95415d7f31e2b3ec934 (patch) | |
| tree | 70f7f4de1948dc87379794f0d633b2c894437f4b | |
| parent | a94afeb5b3c3c95c6d2cf0cd4d69587aba569cfb (diff) | |
| download | frameworks_base-3f99afc0d5c25321b870f95415d7f31e2b3ec934.zip frameworks_base-3f99afc0d5c25321b870f95415d7f31e2b3ec934.tar.gz frameworks_base-3f99afc0d5c25321b870f95415d7f31e2b3ec934.tar.bz2 | |
Close streams for forward-locked apps
Forward-locked apps aren't very prevalent, but it needed to be
restructured to make sure both streams and ZipFile objects are closed.
Change-Id: I41f863224fecd24069e525e9ce3738de8237bd5e
| -rw-r--r-- | services/java/com/android/server/pm/PackageManagerService.java | 66 |
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 1d02b7a3..dfa058c 100644 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -139,6 +139,7 @@ import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; import libcore.io.ErrnoException; +import libcore.io.IoUtils; import libcore.io.Libcore; /** @@ -6979,9 +6980,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); @@ -7023,38 +7023,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, @@ -7073,11 +7069,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() { |
