Skip to content

Commit 4f03d35

Browse files
Dianne HackbornAndroid (Google) Code Review
authored andcommitted
Merge "Fix issues #6103378 and #5959515."
2 parents b7fddda + 6569625 commit 4f03d35

File tree

3 files changed

+52
-2
lines changed

3 files changed

+52
-2
lines changed

core/java/android/content/pm/PackageParser.java

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -944,7 +944,7 @@ private Package parsePackage(
944944

945945
if (name != null && !pkg.requestedPermissions.contains(name)) {
946946
pkg.requestedPermissions.add(name.intern());
947-
pkg.requestedPermissionsRequired.add(required);
947+
pkg.requestedPermissionsRequired.add(required ? Boolean.TRUE : Boolean.FALSE);
948948
}
949949

950950
XmlUtils.skipCurrentTag(parser);
@@ -1239,6 +1239,7 @@ private Package parsePackage(
12391239
}
12401240
implicitPerms.append(npi.name);
12411241
pkg.requestedPermissions.add(npi.name);
1242+
pkg.requestedPermissionsRequired.add(Boolean.TRUE);
12421243
}
12431244
}
12441245
if (implicitPerms != null) {
@@ -3082,7 +3083,36 @@ public void setPackageName(String newName) {
30823083
instrumentation.get(i).setPackageName(newName);
30833084
}
30843085
}
3085-
3086+
3087+
public boolean hasComponentClassName(String name) {
3088+
for (int i=activities.size()-1; i>=0; i--) {
3089+
if (name.equals(activities.get(i).className)) {
3090+
return true;
3091+
}
3092+
}
3093+
for (int i=receivers.size()-1; i>=0; i--) {
3094+
if (name.equals(receivers.get(i).className)) {
3095+
return true;
3096+
}
3097+
}
3098+
for (int i=providers.size()-1; i>=0; i--) {
3099+
if (name.equals(providers.get(i).className)) {
3100+
return true;
3101+
}
3102+
}
3103+
for (int i=services.size()-1; i>=0; i--) {
3104+
if (name.equals(services.get(i).className)) {
3105+
return true;
3106+
}
3107+
}
3108+
for (int i=instrumentation.size()-1; i>=0; i--) {
3109+
if (name.equals(instrumentation.get(i).className)) {
3110+
return true;
3111+
}
3112+
}
3113+
return false;
3114+
}
3115+
30863116
public String toString() {
30873117
return "Package{"
30883118
+ Integer.toHexString(System.identityHashCode(this))

core/java/android/os/Build.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -371,6 +371,15 @@ public static class VERSION_CODES {
371371

372372
/**
373373
* Next up on Android!
374+
*
375+
* <p>Applications targeting this or a later release will get these
376+
* new changes in behavior:</p>
377+
* <ul>
378+
* <li> Calls to {@link android.content.pm.PackageManager#setComponentEnabledSetting
379+
* PackageManager.setComponentEnabledSetting} will now throw an
380+
* IllegalArgumentException if the given component class name does not
381+
* exist in the application's manifest.
382+
* </ul>
374383
*/
375384
public static final int JELLY_BEAN = CUR_DEVELOPMENT;
376385
}

services/java/com/android/server/pm/PackageManagerService.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7744,6 +7744,17 @@ private void setEnabledSetting(
77447744
pkgSetting.pkg.mSetEnabled = newState;
77457745
} else {
77467746
// We're dealing with a component level state change
7747+
// First, verify that this is a valid class name.
7748+
PackageParser.Package pkg = pkgSetting.pkg;
7749+
if (pkg == null || !pkg.hasComponentClassName(className)) {
7750+
if (pkg.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN) {
7751+
throw new IllegalArgumentException("Component class " + className
7752+
+ " does not exist in " + packageName);
7753+
} else {
7754+
Slog.w(TAG, "Failed setComponentEnabledSetting: component class "
7755+
+ className + " does not exist in " + packageName);
7756+
}
7757+
}
77477758
switch (newState) {
77487759
case COMPONENT_ENABLED_STATE_ENABLED:
77497760
if (!pkgSetting.enableComponentLPw(className)) {

0 commit comments

Comments
 (0)