2568467 System crash when installing corrupt APK

Also fix another crash I just saw in the package manager, when a
permission got left around from a previous install but as no
longer defined.

Change-Id: I33b87420f0c59e24b8b77fab8b0316461d99e048
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index b1dcb4a..2a20a2d 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -343,6 +343,9 @@
         } catch (IOException e) {
             Log.w(TAG, "Exception reading " + je.getName() + " in "
                     + jarFile.getName(), e);
+        } catch (RuntimeException e) {
+            Log.w(TAG, "Exception reading " + je.getName() + " in "
+                    + jarFile.getName(), e);
         }
         return null;
     }
diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java
index b95bae4..b1bd263 100644
--- a/services/java/com/android/server/PackageManagerService.java
+++ b/services/java/com/android/server/PackageManagerService.java
@@ -4006,6 +4006,9 @@
                 if (bp.protectionLevel == PermissionInfo.PROTECTION_NORMAL
                         || bp.protectionLevel == PermissionInfo.PROTECTION_DANGEROUS) {
                     allowed = true;
+                } else if (bp.packageSetting == null) {
+                    // This permission is invalid; skip it.
+                    allowed = false;
                 } else if (bp.protectionLevel == PermissionInfo.PROTECTION_SIGNATURE
                         || bp.protectionLevel == PermissionInfo.PROTECTION_SIGNATURE_OR_SYSTEM) {
                     allowed = (checkSignaturesLP(bp.packageSetting.signatures.mSignatures, pkg.mSignatures)