Merge "Settings 2-pane deep link vulnerabilities" into tm-qpr-dev
This commit is contained in:
@@ -27,6 +27,8 @@ import android.app.ActivityManager;
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.UserInfo;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
@@ -66,6 +68,7 @@ import com.android.settings.core.CategoryMixin;
|
||||
import com.android.settings.core.FeatureFlags;
|
||||
import com.android.settings.homepage.contextualcards.ContextualCardsFragment;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settings.password.PasswordUtils;
|
||||
import com.android.settings.safetycenter.SafetyCenterManagerWrapper;
|
||||
import com.android.settingslib.Utils;
|
||||
import com.android.settingslib.core.lifecycle.HideNonSystemOverlayMixin;
|
||||
@@ -444,6 +447,32 @@ public class SettingsHomepageActivity extends FragmentActivity implements
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!TextUtils.equals(PasswordUtils.getCallingAppPackageName(getActivityToken()),
|
||||
getPackageName())) {
|
||||
ActivityInfo targetActivityInfo = null;
|
||||
try {
|
||||
targetActivityInfo = getPackageManager().getActivityInfo(targetComponentName,
|
||||
/* flags= */ 0);
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
Log.e(TAG, "Failed to get target ActivityInfo: " + e);
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!targetActivityInfo.exported) {
|
||||
Log.e(TAG, "Must not launch an unexported Actvity for deep link");
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isCallingAppPermitted(targetActivityInfo.permission)) {
|
||||
Log.e(TAG, "Calling app must have the permission of deep link Activity");
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
targetIntent.setComponent(targetComponentName);
|
||||
|
||||
// To prevent launchDeepLinkIntentToRight again for configuration change.
|
||||
@@ -485,6 +514,12 @@ public class SettingsHomepageActivity extends FragmentActivity implements
|
||||
}
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
boolean isCallingAppPermitted(String permission) {
|
||||
return TextUtils.isEmpty(permission) || PasswordUtils.isCallingAppPermitted(
|
||||
this, getActivityToken(), permission);
|
||||
}
|
||||
|
||||
private String getHighlightMenuKey() {
|
||||
final Intent intent = getIntent();
|
||||
if (intent != null && TextUtils.equals(intent.getAction(),
|
||||
|
Reference in New Issue
Block a user