Merge branch 'fix-npe-verifying-perms' into 'master'
Fix npe verifying perms Fixed a NPE for apps with no permissions. Here is an example of the logging output for a couple of apps too after my change: ``` D/ApkVerifier(10929): Checking permissions D/ApkVerifier(10929): Actual: D/ApkVerifier(10929): None D/ApkVerifier(10929): Expected: D/ApkVerifier(10929): None ``` and ``` D/ApkVerifier(10929): Checking permissions D/ApkVerifier(10929): Actual: D/ApkVerifier(10929): android.permission.READ_EXTERNAL_STORAGE D/ApkVerifier(10929): android.permission.WRITE_EXTERNAL_STORAGE D/ApkVerifier(10929): android.permission.SET_WALLPAPER D/ApkVerifier(10929): android.permission.SET_WALLPAPER_HINTS D/ApkVerifier(10929): android.permission.WRITE_SETTINGS D/ApkVerifier(10929): Expected: D/ApkVerifier(10929): android.permission.SET_WALLPAPER D/ApkVerifier(10929): android.permission.READ_EXTERNAL_STORAGE D/ApkVerifier(10929): android.permission.SET_WALLPAPER_HINTS D/ApkVerifier(10929): android.permission.WRITE_SETTINGS D/ApkVerifier(10929): android.permission.WRITE_EXTERNAL_STORAGE ``` See merge request !407
This commit is contained in:
		
						commit
						5d2c2bc6e6
					
				@ -99,6 +99,15 @@ public class ApkVerifierTest {
 | 
			
		||||
        assertTrue(extendedPermsXml.exists());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testNulls() {
 | 
			
		||||
        assertTrue(ApkVerifier.requestedPermissionsEqual(null, null));
 | 
			
		||||
 | 
			
		||||
        String[] perms = new String[] {"Blah"};
 | 
			
		||||
        assertFalse(ApkVerifier.requestedPermissionsEqual(perms, null));
 | 
			
		||||
        assertFalse(ApkVerifier.requestedPermissionsEqual(null, perms));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Test
 | 
			
		||||
    public void testWithoutPrefix() {
 | 
			
		||||
        Apk apk = new Apk();
 | 
			
		||||
 | 
			
		||||
@ -23,6 +23,7 @@ import android.content.Context;
 | 
			
		||||
import android.content.pm.PackageInfo;
 | 
			
		||||
import android.content.pm.PackageManager;
 | 
			
		||||
import android.net.Uri;
 | 
			
		||||
import android.support.annotation.Nullable;
 | 
			
		||||
import android.text.TextUtils;
 | 
			
		||||
import android.util.Log;
 | 
			
		||||
 | 
			
		||||
@ -80,8 +81,6 @@ class ApkVerifier {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // verify permissions, important for unattended installer
 | 
			
		||||
        Utils.debugLog(TAG, "localPermissions: " + TextUtils.join("\n", localApkInfo.requestedPermissions));
 | 
			
		||||
        Utils.debugLog(TAG, "expectedPermissions: " + TextUtils.join("\n", expectedApk.requestedPermissions));
 | 
			
		||||
        if (!requestedPermissionsEqual(expectedApk.requestedPermissions, localApkInfo.requestedPermissions)) {
 | 
			
		||||
            throw new ApkPermissionUnequalException("Permissions in APK and index.xml do not match!");
 | 
			
		||||
        }
 | 
			
		||||
@ -103,7 +102,11 @@ class ApkVerifier {
 | 
			
		||||
     * data format is {@link String} arrays but they are in effect sets. This is the
 | 
			
		||||
     * same data format as {@link android.content.pm.PackageInfo#requestedPermissions}
 | 
			
		||||
     */
 | 
			
		||||
    public static boolean requestedPermissionsEqual(String[] expected, String[] actual) {
 | 
			
		||||
    public static boolean requestedPermissionsEqual(@Nullable String[] expected, @Nullable String[] actual) {
 | 
			
		||||
        Utils.debugLog(TAG, "Checking permissions");
 | 
			
		||||
        Utils.debugLog(TAG, "Actual:\n  " + (actual == null ? "None" : TextUtils.join("\n  ", actual)));
 | 
			
		||||
        Utils.debugLog(TAG, "Expected:\n  " + (expected == null ? "None" : TextUtils.join("\n  ", expected)));
 | 
			
		||||
 | 
			
		||||
        if (expected == null && actual == null) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user