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); }