Merge branch 'permission-fix' into 'master'
Check that permissions are a subset of listed ones * uses containsAll() instead of equals() Fixes #703 See merge request !344
This commit is contained in:
		
						commit
						72c6b86376
					
				| @ -56,16 +56,16 @@ public class ApkVerifier { | ||||
|         PackageInfo localApkInfo = pm.getPackageArchiveInfo( | ||||
|                 localApkUri.getPath(), PackageManager.GET_PERMISSIONS); | ||||
|         if (localApkInfo == null) { | ||||
|             throw new ApkVerificationException("parsing apk file failed!"); | ||||
|             throw new ApkVerificationException("Parsing apk file failed!"); | ||||
|         } | ||||
| 
 | ||||
|         // check if the apk has the expected packageName | ||||
|         if (!TextUtils.equals(localApkInfo.packageName, expectedApk.packageName)) { | ||||
|             throw new ApkVerificationException("apk has unexpected packageName!"); | ||||
|             throw new ApkVerificationException("Apk file has unexpected packageName!"); | ||||
|         } | ||||
| 
 | ||||
|         if (localApkInfo.versionCode < 0) { | ||||
|             throw new ApkVerificationException("apk has no valid versionCode!"); | ||||
|             throw new ApkVerificationException("Apk file has no valid versionCode!"); | ||||
|         } | ||||
| 
 | ||||
|         // verify permissions, important for unattended installer | ||||
| @ -73,8 +73,14 @@ public class ApkVerifier { | ||||
|         HashSet<String> expectedPermissions = expectedApk.getFullPermissionsSet(); | ||||
|         Utils.debugLog(TAG, "localPermissions: " + localPermissions); | ||||
|         Utils.debugLog(TAG, "expectedPermissions: " + expectedPermissions); | ||||
|         if (!localPermissions.equals(expectedPermissions)) { | ||||
|             throw new ApkVerificationException("permissions of apk not equals expected permissions!"); | ||||
|         // NOTE: Some permissions could have a maxSdkVersion < current sdk version | ||||
|         // and are thus not parsed by pm.getPackageArchiveInfo(). | ||||
|         // Thus, containsAll() instead of equals() is used! | ||||
|         // See also https://gitlab.com/fdroid/fdroidclient/issues/703 | ||||
|         if (!expectedPermissions.containsAll(localPermissions)) { | ||||
|             throw new ApkVerificationException( | ||||
|                     "Permissions of the apk file are not a true subset of the permissions listed by the repo," + | ||||
|                     " i.e., some permissions have not been shown to the user!"); | ||||
|         } | ||||
| 
 | ||||
|         int localTargetSdkVersion = localApkInfo.applicationInfo.targetSdkVersion; | ||||
| @ -85,7 +91,7 @@ public class ApkVerifier { | ||||
|             // NOTE: In old fdroidserver versions, targetSdkVersion was not stored inside the repo! | ||||
|             Log.w(TAG, "Skipping check for targetSdkVersion, not available in this repo!"); | ||||
|         } else if (localTargetSdkVersion != expectedTargetSdkVersion) { | ||||
|             throw new ApkVerificationException("targetSdkVersion of apk not equals expected targetSdkVersion!"); | ||||
|             throw new ApkVerificationException("TargetSdkVersion of apk file is not the expected targetSdkVersion!"); | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Daniel Martí
						Daniel Martí