From 4907e0b2893f45baa077c9ee8e2dd26555963b29 Mon Sep 17 00:00:00 2001
From: Hans-Christoph Steiner <hans@eds.org>
Date: Tue, 28 Jun 2016 00:11:25 +0200
Subject: [PATCH] Utils.getBinaryHash() should not catch exceptions

By catching the exception here and returning null, the problem is then
passed on further down the line where it is harder to debug.  The hash is
required wherever this method is called, so this should fail immediately.

#699
---
 .../main/java/org/fdroid/fdroid/Utils.java    | 20 +++++++++----------
 1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/app/src/main/java/org/fdroid/fdroid/Utils.java b/app/src/main/java/org/fdroid/fdroid/Utils.java
index c6bb9b571..1d66b371a 100644
--- a/app/src/main/java/org/fdroid/fdroid/Utils.java
+++ b/app/src/main/java/org/fdroid/fdroid/Utils.java
@@ -145,7 +145,7 @@ public final class Utils {
         InputStream input = null;
         OutputStream output = null;
         try {
-            input  = new FileInputStream(inFile);
+            input = new FileInputStream(inFile);
             output = new FileOutputStream(outFile);
             Utils.copy(input, output);
             return true;
@@ -372,6 +372,11 @@ public final class Utils {
         }
     }
 
+    /**
+     * Get the checksum hash of the file {@code apk} using the algorithm in {@code algo}.
+     * {@code apk} must exist on the filesystem and {@code algo} must be supported
+     * by this device, otherwise an {@link IllegalArgumentException} is thrown.
+     */
     public static String getBinaryHash(File apk, String algo) {
         FileInputStream fis = null;
         try {
@@ -387,13 +392,8 @@ public final class Utils {
 
             byte[] mdbytes = md.digest();
             return toHexString(mdbytes).toLowerCase(Locale.ENGLISH);
-        } catch (IOException e) {
-            Log.e(TAG, "Error reading \"" + apk.getAbsolutePath()
-                    + "\" to compute " + algo + " hash.", e);
-            return null;
-        } catch (NoSuchAlgorithmException e) {
-            Log.e(TAG, "Device does not support " + algo + " MessageDisgest algorithm");
-            return null;
+        } catch (IOException | NoSuchAlgorithmException e) {
+            throw new IllegalArgumentException(e);
         } finally {
             closeQuietly(fis);
         }
@@ -476,7 +476,7 @@ public final class Utils {
 
         @Override
         public void handleTag(boolean opening, String tag, Editable output,
-                XMLReader reader) {
+                              XMLReader reader) {
             switch (tag) {
                 case "ul":
                     if (opening) {
@@ -525,7 +525,7 @@ public final class Utils {
         String versionName = null;
         try {
             versionName = context.getPackageManager()
-                .getPackageInfo(context.getPackageName(), 0).versionName;
+                    .getPackageInfo(context.getPackageName(), 0).versionName;
         } catch (PackageManager.NameNotFoundException e) {
             Log.e(TAG, "Could not get client version name", e);
         }