From 53cbb26209fd49bd95484fa5904252108fbae251 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 23 Aug 2016 22:56:31 +0200 Subject: [PATCH] check whether installed APKs exist and are readable before hashing I guess APKs could disappear, or perhaps not be readable. closes #699 Here's the stacktrace: java.io.FileNotFoundException: /system/priv-app/ATT_Ready2Go/ATT_Ready2Go.apk: open failed: ENOENT (No such file or directory) at org.fdroid.fdroid.Utils.getBinaryHash(Utils.java:405) at org.fdroid.fdroid.data.InstalledAppProviderService.onHandleIntent(InstalledAppProviderService.java:164) at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.os.HandlerThread.run(HandlerThread.java:61) --- .../fdroid/fdroid/data/InstalledAppProviderService.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java b/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java index 44dc8e642..74aeb18c4 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java +++ b/app/src/main/java/org/fdroid/fdroid/data/InstalledAppProviderService.java @@ -160,9 +160,12 @@ public class InstalledAppProviderService extends IntentService { if (ACTION_INSERT.equals(action)) { PackageInfo packageInfo = getPackageInfo(intent, packageName); if (packageInfo != null) { - String hashType = "sha256"; - String hash = Utils.getBinaryHash(new File(packageInfo.applicationInfo.publicSourceDir), hashType); - insertAppIntoDb(this, packageInfo, hashType, hash); + File apk = new File(packageInfo.applicationInfo.publicSourceDir); + if (apk.exists() && apk.canRead()) { + String hashType = "sha256"; + String hash = Utils.getBinaryHash(apk, hashType); + insertAppIntoDb(this, packageInfo, hashType, hash); + } } } else if (ACTION_DELETE.equals(action)) { deleteAppFromDb(this, packageName);