From 5db0cd49e8553f45deec6e3db7ec84a5c78ee228 Mon Sep 17 00:00:00 2001 From: dcashman Date: Fri, 22 May 2015 15:24:40 -0700 Subject: [PATCH] Set error code on failed keyset manifest parsing. Bug: 21403585 Change-Id: I6f8e0766d373b1b0451b2abef7af6cbb089e4e0c --- core/java/android/content/pm/PackageParser.java | 35 +++++++++++++++---------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index acc27c3944aa..596c0e4c2e23 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -2047,8 +2047,9 @@ public class PackageParser { String tagName = parser.getName(); if (tagName.equals("key-set")) { if (currentKeySet != null) { - Slog.w(TAG, "Improperly nested 'key-set' tag at " - + parser.getPositionDescription()); + outError[0] = "Improperly nested 'key-set' tag at " + + parser.getPositionDescription(); + mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED; return false; } final TypedArray sa = res.obtainAttributes(attrs, @@ -2061,8 +2062,9 @@ public class PackageParser { sa.recycle(); } else if (tagName.equals("public-key")) { if (currentKeySet == null) { - Slog.w(TAG, "Improperly nested 'public-key' tag at " - + parser.getPositionDescription()); + outError[0] = "Improperly nested 'key-set' tag at " + + parser.getPositionDescription(); + mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED; return false; } final TypedArray sa = res.obtainAttributes(attrs, @@ -2072,8 +2074,9 @@ public class PackageParser { final String encodedKey = sa.getNonResourceString( com.android.internal.R.styleable.AndroidManifestPublicKey_value); if (encodedKey == null && publicKeys.get(publicKeyName) == null) { - Slog.w(TAG, "'public-key' " + publicKeyName + " must define a public-key value" - + " on first use at " + parser.getPositionDescription()); + outError[0] = "'public-key' " + publicKeyName + " must define a public-key value" + + " on first use at " + parser.getPositionDescription(); + mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED; sa.recycle(); return false; } else if (encodedKey != null) { @@ -2093,9 +2096,10 @@ public class PackageParser { /* public-key first definition, or matches old definition */ publicKeys.put(publicKeyName, currentKey); } else { - Slog.w(TAG, "Value of 'public-key' " + publicKeyName + outError[0] = "Value of 'public-key' " + publicKeyName + " conflicts with previously defined value at " - + parser.getPositionDescription()); + + parser.getPositionDescription(); + mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED; sa.recycle(); return false; } @@ -2112,9 +2116,10 @@ public class PackageParser { sa.recycle(); XmlUtils.skipCurrentTag(parser); } else if (RIGID_PARSER) { - Slog.w(TAG, "Bad element under : " + parser.getName() + outError[0] = "Bad element under : " + parser.getName() + " at " + mArchiveSourcePath + " " - + parser.getPositionDescription()); + + parser.getPositionDescription(); + mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED; return false; } else { Slog.w(TAG, "Unknown element under : " + parser.getName() @@ -2126,8 +2131,9 @@ public class PackageParser { } Set publicKeyNames = publicKeys.keySet(); if (publicKeyNames.removeAll(definedKeySets.keySet())) { - Slog.w(TAG, "Package" + owner.packageName + " AndroidManifext.xml " - + "'key-set' and 'public-key' names must be distinct."); + outError[0] = "Package" + owner.packageName + " AndroidManifext.xml " + + "'key-set' and 'public-key' names must be distinct."; + mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED; return false; } owner.mKeySetMapping = new ArrayMap>(); @@ -2152,8 +2158,9 @@ public class PackageParser { if (owner.mKeySetMapping.keySet().containsAll(upgradeKeySets)) { owner.mUpgradeKeySets = upgradeKeySets; } else { - Slog.w(TAG, "Package" + owner.packageName + " AndroidManifext.xml " - + "does not define all 'upgrade-key-set's ."); + outError[0] ="Package" + owner.packageName + " AndroidManifext.xml " + + "does not define all 'upgrade-key-set's ."; + mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED; return false; } return true; -- 2.11.0