Merge "Fix the security vulnerability issue in AppLocalePickerActivity"

This commit is contained in:
Josh Hou
2023-01-31 05:31:39 +00:00
committed by Android (Google) Code Review
2 changed files with 180 additions and 8 deletions

View File

@@ -19,6 +19,7 @@ package com.android.settings.localepicker;
import android.app.FragmentTransaction;
import android.app.LocaleManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.LocaleList;
@@ -34,6 +35,7 @@ import com.android.internal.app.LocalePickerWithRegion;
import com.android.internal.app.LocaleStore;
import com.android.settings.R;
import com.android.settings.applications.AppInfoBase;
import com.android.settings.applications.AppLocaleUtil;
import com.android.settings.applications.appinfo.AppLocaleDetails;
import com.android.settings.core.SettingsBaseActivity;
@@ -64,12 +66,18 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
}
mContextAsUser = this;
if (getIntent().hasExtra(AppInfoBase.ARG_PACKAGE_UID)) {
int userId = getIntent().getIntExtra(AppInfoBase.ARG_PACKAGE_UID, -1);
if (userId != -1) {
UserHandle userHandle = UserHandle.getUserHandleForUid(userId);
int uid = getIntent().getIntExtra(AppInfoBase.ARG_PACKAGE_UID, -1);
if (uid != -1) {
UserHandle userHandle = UserHandle.getUserHandleForUid(uid);
mContextAsUser = createContextAsUser(userHandle, 0);
}
}
if (!canDisplayLocaleUi() || mContextAsUser.getUserId() != UserHandle.myUserId()) {
Log.w(TAG, "Not allow to display Locale Settings UI.");
finish();
return;
}
setTitle(R.string.app_locale_picker_title);
getActionBar().setDisplayHomeAsUpEnabled(true);
@@ -161,4 +169,18 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
.replace(R.id.content_frame, mLocalePickerWithRegion)
.commit();
}
private boolean canDisplayLocaleUi() {
try {
PackageManager packageManager = mContextAsUser.getPackageManager();
return AppLocaleUtil.canDisplayLocaleUi(mContextAsUser,
packageManager.getApplicationInfo(mPackageName, 0),
packageManager.queryIntentActivities(AppLocaleUtil.LAUNCHER_ENTRY_INTENT,
PackageManager.GET_META_DATA));
} catch (PackageManager.NameNotFoundException e) {
Log.e(TAG, "Unable to find info for package: " + mPackageName);
}
return false;
}
}