Fix the security vulnerability issue in AppLocalePickerActivity am: 33ef83795e

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/21152842

Change-Id: Ic0ff8ade7897052d04c118dc0a8f67312f5d0ebf
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Josh Hou
2023-02-02 00:50:59 +00:00
committed by Automerger Merge Worker
2 changed files with 183 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,17 @@ 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);
@@ -160,4 +167,10 @@ public class AppLocalePickerActivity extends SettingsBaseActivity
.replace(R.id.content_frame, mLocalePickerWithRegion)
.commit();
}
private boolean canDisplayLocaleUi() {
return AppLocaleUtil.canDisplayLocaleUi(mContextAsUser, mPackageName,
mContextAsUser.getPackageManager().queryIntentActivities(
AppLocaleUtil.LAUNCHER_ENTRY_INTENT, PackageManager.GET_META_DATA));
}
}