Limit length of the name in <uses-permission>

To mitigate a boot loop with a huge name string, this CL restricts
the max length of the name in <users-permission> attr.

Bug: 259942609
Test: manually using the PoC in the buganizer to ensure the symptom
      no longer exists.
Change-Id: I35dde9d6bea9eb7c1b81e8cbadeeb908b3fb713f
This commit is contained in:
Jackal Guo
2023-01-10 16:18:02 +08:00
parent cda60c2403
commit b7d62363d2

View File

@@ -247,6 +247,9 @@ public class ParsingPackageUtils {
private static final String MAX_NUM_COMPONENTS_ERR_MSG =
"Total number of components has exceeded the maximum number: " + MAX_NUM_COMPONENTS;
/** The maximum permission name length. */
private static final int MAX_PERMISSION_NAME_LENGTH = 512;
@IntDef(flag = true, prefix = { "PARSE_" }, value = {
PARSE_CHATTY,
PARSE_COLLECT_CERTIFICATES,
@@ -1260,6 +1263,11 @@ public class ParsingPackageUtils {
// that may change.
String name = sa.getNonResourceString(
R.styleable.AndroidManifestUsesPermission_name);
if (TextUtils.length(name) > MAX_PERMISSION_NAME_LENGTH) {
return input.error(INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
"The name in the <uses-permission> is greater than "
+ MAX_PERMISSION_NAME_LENGTH);
}
int minSdkVersion = parseMinOrMaxSdkVersion(sa,
R.styleable.AndroidManifestUsesPermission_minSdkVersion,