From 6a0b16fc7d499060f79465b70a20b43a2e86b979 Mon Sep 17 00:00:00 2001
From: Peter Serwylo <peter@serwylo.com>
Date: Tue, 18 Apr 2017 18:31:30 +1000
Subject: [PATCH] Increase verbosity around crash site for better ACRA reports.

Received the following crash report, where the user said it crashed
while trying to install the priviledged extension:

```
java.lang.NullPointerException: Attempt to read from field 'android.content.pm.Signature[] android.content.pm.PackageInfo.signatures' on a null object reference
at org.fdroid.fdroid.installer.ApkSignatureVerifier.getApkSignature(ApkSignatureVerifier.java:70)
at org.fdroid.fdroid.installer.ApkSignatureVerifier.hasFDroidSignature(ApkSignatureVerifier.java:54)
at org.fdroid.fdroid.installer.ExtensionInstaller.installPackageInternal(ExtensionInstaller.java:53)
at org.fdroid.fdroid.installer.Installer.installPackage(Installer.java:265)
at org.fdroid.fdroid.installer.InstallerService.onHandleIntent(InstallerService.java:77)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.os.HandlerThread.run(HandlerThread.java:61)
```

Not sure how to address it yet, so adding more specific excetpion for
if it happens in the future.
---
 .../org/fdroid/fdroid/installer/ApkSignatureVerifier.java | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/app/src/main/java/org/fdroid/fdroid/installer/ApkSignatureVerifier.java b/app/src/main/java/org/fdroid/fdroid/installer/ApkSignatureVerifier.java
index ee01a0543..e8479c22f 100644
--- a/app/src/main/java/org/fdroid/fdroid/installer/ApkSignatureVerifier.java
+++ b/app/src/main/java/org/fdroid/fdroid/installer/ApkSignatureVerifier.java
@@ -66,7 +66,15 @@ class ApkSignatureVerifier {
 
     private byte[] getApkSignature(File apkFile) {
         final String pkgPath = apkFile.getAbsolutePath();
+        if (!apkFile.exists()) {
+            throw new IllegalArgumentException("Could not find APK at \"" + pkgPath + "\" when checking for signature.");
+        }
+
         PackageInfo pkgInfo = pm.getPackageArchiveInfo(pkgPath, PackageManager.GET_SIGNATURES);
+        if (pkgInfo == null) {
+            throw new NullPointerException("Could not find PackageInfo for package at \"" + pkgPath + "\".");
+        }
+
         return signatureToBytes(pkgInfo.signatures);
     }