Merge branch 'hash-fixes' into 'master'
Hash fixes Two semi-related commits about hashes. This standardizes all APK hashes to be all lowercase like in the _fdroidserver index.xml_. The other then stops swallowing hash-related exceptions so we have a chance of debugging the issue. @pserwylo we discussed a0f716c0db705f137749eef3d4964b8ba1050b18 in relation to #699. See merge request !377
This commit is contained in:
		
						commit
						943e0d0a1c
					
				| @ -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 { | ||||
| @ -386,14 +391,9 @@ public final class Utils { | ||||
|             } | ||||
| 
 | ||||
|             byte[] mdbytes = md.digest(); | ||||
|             return toHexString(mdbytes); | ||||
|         } 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; | ||||
|             return toHexString(mdbytes).toLowerCase(Locale.ENGLISH); | ||||
|         } 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); | ||||
|         } | ||||
|  | ||||
| @ -25,7 +25,7 @@ public class Apk extends ValueObject implements Comparable<Apk>, Parcelable { | ||||
|     public int versionCode; | ||||
|     public int size; // Size in bytes - 0 means we don't know! | ||||
|     public long repo; // ID of the repo it comes from | ||||
|     public String hash; | ||||
|     public String hash; // checksum of the APK, in lowercase hex | ||||
|     public String hashType; | ||||
|     public int minSdkVersion = SDK_VERSION_MIN_VALUE; // 0 if unknown | ||||
|     public int targetSdkVersion = SDK_VERSION_MIN_VALUE; // 0 if unknown | ||||
|  | ||||
| @ -120,7 +120,7 @@ class DBHelper extends SQLiteOpenHelper { | ||||
|             + " );"; | ||||
|     private static final String DROP_TABLE_INSTALLED_APP = "DROP TABLE " + InstalledAppTable.NAME + ";"; | ||||
| 
 | ||||
|     private static final int DB_VERSION = 60; | ||||
|     private static final int DB_VERSION = 61; | ||||
| 
 | ||||
|     private final Context context; | ||||
| 
 | ||||
| @ -327,6 +327,16 @@ class DBHelper extends SQLiteOpenHelper { | ||||
|         migrateAppPrimaryKeyToRowId(db, oldVersion); | ||||
|         removeApkPackageNameColumn(db, oldVersion); | ||||
|         addAppPrefsTable(db, oldVersion); | ||||
|         lowerCaseApkHashes(db, oldVersion); | ||||
|     } | ||||
| 
 | ||||
|     private void lowerCaseApkHashes(SQLiteDatabase db, int oldVersion) { | ||||
|         if (oldVersion >= 61) { | ||||
|             return; | ||||
|         } | ||||
|         Utils.debugLog(TAG, "Lowercasing all APK hashes"); | ||||
|         db.execSQL("UPDATE " + InstalledAppTable.NAME + " SET " + InstalledAppTable.Cols.HASH | ||||
|                 + " = lower(" + InstalledAppTable.Cols.HASH + ")"); | ||||
|     } | ||||
| 
 | ||||
|     private void addAppPrefsTable(SQLiteDatabase db, int oldVersion) { | ||||
|  | ||||
| @ -470,7 +470,7 @@ public final class LocalRepoManager { | ||||
|         private void tagHash(App app) throws IOException { | ||||
|             serializer.startTag("", "hash"); | ||||
|             serializer.attribute("", "type", app.installedApk.hashType); | ||||
|             serializer.text(app.installedApk.hash.toLowerCase(Locale.US)); | ||||
|             serializer.text(app.installedApk.hash); | ||||
|             serializer.endTag("", "hash"); | ||||
|         } | ||||
|     } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Peter Serwylo
						Peter Serwylo