From bc09755e193c2802d2d88871ac3d1f182b260c30 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Tue, 9 Sep 2014 14:57:26 -0700 Subject: Missing manifest error should be NO_CERTIFICATES. When META-INF/MANIFEST.MF is missing, treat as NO_CERTIFICATES instead of CERTIFICATE_ENCODING. Also remove redundant layer of debugging details when wrapping exceptions. Bug: 15667982 Change-Id: I6e8216d5bf6e42da1feb70c89f991001380305be --- core/java/android/content/pm/PackageParser.java | 5 ++++- .../core/java/com/android/server/pm/PackageInstallerSession.java | 9 +++------ .../core/java/com/android/server/pm/PackageManagerException.java | 7 +++++++ .../core/java/com/android/server/pm/PackageManagerService.java | 6 ++---- 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index e0fd532e4310..ddb0a6d7ab62 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -1099,9 +1099,12 @@ public class PackageParser { } } } - } catch (GeneralSecurityException | IOException | RuntimeException e) { + } catch (GeneralSecurityException e) { throw new PackageParserException(INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING, "Failed to collect certificates from " + apkPath, e); + } catch (IOException | RuntimeException e) { + throw new PackageParserException(INSTALL_PARSE_FAILED_NO_CERTIFICATES, + "Failed to collect certificates from " + apkPath, e); } finally { closeQuietly(jarFile); } diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index adca46a6b826..06f550dabd89 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -579,8 +579,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { try { apk = PackageParser.parseApkLite(file, PackageParser.PARSE_COLLECT_CERTIFICATES); } catch (PackageParserException e) { - throw new PackageManagerException(INSTALL_FAILED_INVALID_APK, - "Failed to parse " + file + ": " + e); + throw PackageManagerException.from(e); } if (!stagedSplits.add(apk.splitName)) { @@ -646,8 +645,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { existingBase = PackageParser.parseApkLite(new File(app.getBaseCodePath()), PackageParser.PARSE_COLLECT_CERTIFICATES); } catch (PackageParserException e) { - throw new PackageManagerException(INSTALL_FAILED_INVALID_APK, - "Failed to parse existing package " + app.getCodePath() + ": " + e); + throw PackageManagerException.from(e); } assertApkConsistent("Existing base", existingBase); @@ -699,8 +697,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { try { baseApk = PackageParser.parseApkLite(mResolvedBaseFile, 0); } catch (PackageParserException e) { - throw new PackageManagerException(INSTALL_FAILED_INVALID_APK, - "Failed to parse base package " + mResolvedBaseFile + ": " + e); + throw PackageManagerException.from(e); } final List splitPaths = new ArrayList<>(); diff --git a/services/core/java/com/android/server/pm/PackageManagerException.java b/services/core/java/com/android/server/pm/PackageManagerException.java index 0cbdcdc18a42..a41636e5d1b5 100644 --- a/services/core/java/com/android/server/pm/PackageManagerException.java +++ b/services/core/java/com/android/server/pm/PackageManagerException.java @@ -16,6 +16,8 @@ package com.android.server.pm; +import android.content.pm.PackageParser.PackageParserException; + /** {@hide} */ public class PackageManagerException extends Exception { public final int error; @@ -29,4 +31,9 @@ public class PackageManagerException extends Exception { super(detailMessage, throwable); this.error = error; } + + public static PackageManagerException from(PackageParserException e) + throws PackageManagerException { + throw new PackageManagerException(e.error, e.getMessage(), e.getCause()); + } } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 7b4270b2ec22..b111b8b85f00 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -4165,8 +4165,7 @@ public class PackageManagerService extends IPackageManager.Stub { pp.collectCertificates(pkg, parseFlags); pp.collectManifestDigest(pkg); } catch (PackageParserException e) { - throw new PackageManagerException(e.error, "Failed to collect certificates for " - + pkg.packageName + ": " + e.getMessage()); + throw PackageManagerException.from(e); } } @@ -4191,8 +4190,7 @@ public class PackageManagerService extends IPackageManager.Stub { try { pkg = pp.parsePackage(scanFile, parseFlags); } catch (PackageParserException e) { - throw new PackageManagerException(e.error, - "Failed to scan " + scanFile + ": " + e.getMessage()); + throw PackageManagerException.from(e); } PackageSetting ps = null; -- cgit v1.2.3-59-g8ed1b