Remove Java class name restriction on uses-library

Bug: 259946410
Fixes: 293965805
Test: atest AndroidPackageParsingValidationTest
Change-Id: Ie371724c8eea2a24bce123b66fa6e2000fd12a36
This commit is contained in:
William Loh
2023-08-01 10:52:16 -07:00
parent 6a67ea5e7d
commit eff074d870
2 changed files with 195 additions and 76 deletions

View File

@@ -746,7 +746,6 @@ public class Element {
case TAG_PROVIDER:
case TAG_RECEIVER:
case TAG_SERVICE:
case TAG_USES_LIBRARY:
switch (name) {
case TAG_ATTR_NAME:
return true;

View File

@@ -99,23 +99,45 @@ class AndroidPackageParsingValidationTest {
@Test
fun parseApplicationTag() {
val tag = "application"
validateTagAttr(tag, "backupAgent",
R.styleable.AndroidManifestApplication_backupAgent, 1024)
validateTagAttrComponentName(tag, "backupAgent",
R.styleable.AndroidManifestApplication_backupAgent)
validateTagAttr(tag, "manageSpaceActivity",
R.styleable.AndroidManifestApplication_manageSpaceActivity, 1024)
validateTagAttr(
tag,
"backupAgent",
R.styleable.AndroidManifestApplication_backupAgent,
1024
)
validateTagAttrComponentName(
tag,
"backupAgent",
R.styleable.AndroidManifestApplication_backupAgent
)
validateTagAttr(
tag,
"manageSpaceActivity",
R.styleable.AndroidManifestApplication_manageSpaceActivity,
1024
)
validateTagAttr(tag, "name", R.styleable.AndroidManifestApplication_name, 1024)
validateTagAttrComponentName(tag, "name",
R.styleable.AndroidManifestApplication_name)
validateTagAttrComponentName(tag, "name", R.styleable.AndroidManifestApplication_name)
validateTagAttr(tag, "permission", R.styleable.AndroidManifestApplication_permission, 1024)
validateTagAttr(tag, "process", R.styleable.AndroidManifestApplication_process, 1024)
validateTagAttr(tag, "requiredAccountType",
R.styleable.AndroidManifestApplication_requiredAccountType, 1024)
validateTagAttr(tag, "restrictedAccountType",
R.styleable.AndroidManifestApplication_restrictedAccountType, 1024)
validateTagAttr(tag, "taskAffinity",
R.styleable.AndroidManifestApplication_taskAffinity, 1024)
validateTagAttr(
tag,
"requiredAccountType",
R.styleable.AndroidManifestApplication_requiredAccountType,
1024
)
validateTagAttr(
tag,
"restrictedAccountType",
R.styleable.AndroidManifestApplication_restrictedAccountType,
1024
)
validateTagAttr(
tag,
"taskAffinity",
R.styleable.AndroidManifestApplication_taskAffinity,
1024
)
validateTagCount("profileable", 100, tag)
validateTagCount("uses-native-library", 100, tag)
validateTagCount("receiver", 1000, tag)
@@ -159,12 +181,23 @@ class AndroidPackageParsingValidationTest {
fun parseActivityAliasTag() {
val tag = "activity-alias"
validateTagAttr(tag, "name", R.styleable.AndroidManifestActivityAlias_name, 1024)
validateTagAttr(tag, "permission",
R.styleable.AndroidManifestActivityAlias_permission, 1024)
validateTagAttr(tag, "targetActivity",
R.styleable.AndroidManifestActivityAlias_targetActivity, 1024)
validateTagAttrComponentName(tag, "targetActivity",
R.styleable.AndroidManifestActivityAlias_targetActivity)
validateTagAttr(
tag,
"permission",
R.styleable.AndroidManifestActivityAlias_permission,
1024
)
validateTagAttr(
tag,
"targetActivity",
R.styleable.AndroidManifestActivityAlias_targetActivity,
1024
)
validateTagAttrComponentName(
tag,
"targetActivity",
R.styleable.AndroidManifestActivityAlias_targetActivity
)
validateTagCount("meta-data", 1000, tag)
validateTagCount("intent-filter", 20000, tag)
}
@@ -173,7 +206,6 @@ class AndroidPackageParsingValidationTest {
fun parseUsesLibraryTag() {
val tag = "uses-library"
validateTagAttr(tag, "name", R.styleable.AndroidManifestUsesLibrary_name, 1024)
validateTagAttrComponentName(tag, "name", R.styleable.AndroidManifestUsesLibrary_name)
}
@Test
@@ -181,10 +213,17 @@ class AndroidPackageParsingValidationTest {
val tag = "activity"
validateTagAttr(tag, "name", R.styleable.AndroidManifestActivity_name, 1024)
validateTagAttrComponentName(tag, "name", R.styleable.AndroidManifestActivity_name)
validateTagAttr(tag, "parentActivityName",
R.styleable.AndroidManifestActivity_parentActivityName, 1024)
validateTagAttrComponentName(tag, "parentActivityName",
R.styleable.AndroidManifestActivity_parentActivityName)
validateTagAttr(
tag,
"parentActivityName",
R.styleable.AndroidManifestActivity_parentActivityName,
1024
)
validateTagAttrComponentName(
tag,
"parentActivityName",
R.styleable.AndroidManifestActivity_parentActivityName
)
validateTagAttr(tag, "permission", R.styleable.AndroidManifestActivity_permission, 1024)
validateTagAttr(tag, "process", R.styleable.AndroidManifestActivity_process, 1024)
validateTagAttr(tag, "taskAffinity", R.styleable.AndroidManifestActivity_taskAffinity, 1024)
@@ -197,26 +236,49 @@ class AndroidPackageParsingValidationTest {
fun parseOverlayTag() {
val tag = "overlay"
validateTagAttr(tag, "category", R.styleable.AndroidManifestResourceOverlay_category, 1024)
validateTagAttr(tag, "requiredSystemPropertyName",
R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyName, 1024)
validateTagAttr(tag, "requiredSystemPropertyValue",
R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyValue, PROP_VALUE_MAX)
validateTagAttr(tag, "targetPackage",
R.styleable.AndroidManifestResourceOverlay_targetPackage, 256)
validateTagAttr(tag, "targetName",
R.styleable.AndroidManifestResourceOverlay_targetName, 1024)
validateTagAttr(
tag,
"requiredSystemPropertyName",
R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyName,
1024
)
validateTagAttr(
tag,
"requiredSystemPropertyValue",
R.styleable.AndroidManifestResourceOverlay_requiredSystemPropertyValue,
PROP_VALUE_MAX
)
validateTagAttr(
tag,
"targetPackage",
R.styleable.AndroidManifestResourceOverlay_targetPackage,
256
)
validateTagAttr(
tag,
"targetName",
R.styleable.AndroidManifestResourceOverlay_targetName,
1024
)
}
@Test
fun parseInstrumentationTag() {
val tag = "instrumentation"
validateTagAttr(tag, "name", R.styleable.AndroidManifestInstrumentation_name, 1024)
validateTagAttrComponentName(tag, "name",
R.styleable.AndroidManifestInstrumentation_name)
validateTagAttr(tag, "targetPackage",
R.styleable.AndroidManifestInstrumentation_targetPackage, 256)
validateTagAttr(tag, "targetProcesses",
R.styleable.AndroidManifestInstrumentation_targetProcesses, 1024)
validateTagAttrComponentName(tag, "name", R.styleable.AndroidManifestInstrumentation_name)
validateTagAttr(
tag,
"targetPackage",
R.styleable.AndroidManifestInstrumentation_targetPackage,
256
)
validateTagAttr(
tag,
"targetProcesses",
R.styleable.AndroidManifestInstrumentation_targetProcesses,
1024
)
}
@Test
@@ -278,10 +340,18 @@ class AndroidPackageParsingValidationTest {
validateTagAttrComponentName(tag, "name", R.styleable.AndroidManifestProvider_name)
validateTagAttr(tag, "permission", R.styleable.AndroidManifestProvider_permission, 1024)
validateTagAttr(tag, "process", R.styleable.AndroidManifestProvider_process, 1024)
validateTagAttr(tag, "readPermission",
R.styleable.AndroidManifestProvider_readPermission, 1024)
validateTagAttr(tag, "writePermission",
R.styleable.AndroidManifestProvider_writePermission, 1024)
validateTagAttr(
tag,
"readPermission",
R.styleable.AndroidManifestProvider_readPermission,
1024
)
validateTagAttr(
tag,
"writePermission",
R.styleable.AndroidManifestProvider_writePermission,
1024
)
validateTagCount("grant-uri-permission", 100, tag)
validateTagCount("path-permission", 100, tag)
validateTagCount("meta-data", 1000, tag)
@@ -292,26 +362,54 @@ class AndroidPackageParsingValidationTest {
fun parseGrantUriPermissionTag() {
val tag = "grant-uri-permission"
validateTagAttr(tag, "path", R.styleable.AndroidManifestGrantUriPermission_path, 4000)
validateTagAttr(tag, "pathPrefix",
R.styleable.AndroidManifestGrantUriPermission_pathPrefix, 4000)
validateTagAttr(tag, "pathPattern",
R.styleable.AndroidManifestGrantUriPermission_pathPattern, 4000)
validateTagAttr(
tag,
"pathPrefix",
R.styleable.AndroidManifestGrantUriPermission_pathPrefix,
4000
)
validateTagAttr(
tag,
"pathPattern",
R.styleable.AndroidManifestGrantUriPermission_pathPattern,
4000
)
}
@Test
fun parsePathPermissionTag() {
val tag = "path-permission"
validateTagAttr(tag, "path", R.styleable.AndroidManifestPathPermission_path, 4000)
validateTagAttr(tag, "pathPrefix",
R.styleable.AndroidManifestPathPermission_pathPrefix, 4000)
validateTagAttr(tag, "pathPattern",
R.styleable.AndroidManifestPathPermission_pathPattern, 4000)
validateTagAttr(tag, "permission",
R.styleable.AndroidManifestPathPermission_permission, 1024)
validateTagAttr(tag, "readPermission",
R.styleable.AndroidManifestPathPermission_readPermission, 1024)
validateTagAttr(tag, "writePermission",
R.styleable.AndroidManifestPathPermission_writePermission, 1024)
validateTagAttr(
tag,
"pathPrefix",
R.styleable.AndroidManifestPathPermission_pathPrefix,
4000
)
validateTagAttr(
tag,
"pathPattern",
R.styleable.AndroidManifestPathPermission_pathPattern,
4000
)
validateTagAttr(
tag,
"permission",
R.styleable.AndroidManifestPathPermission_permission,
1024
)
validateTagAttr(
tag,
"readPermission",
R.styleable.AndroidManifestPathPermission_readPermission,
1024
)
validateTagAttr(
tag,
"writePermission",
R.styleable.AndroidManifestPathPermission_writePermission,
1024
)
}
@Test
@@ -350,8 +448,12 @@ class AndroidPackageParsingValidationTest {
validateTagAttr(tag, "pathPattern", R.styleable.AndroidManifestData_pathPattern, 4000)
validateTagAttr(tag, "pathPrefix", R.styleable.AndroidManifestData_pathPrefix, 4000)
validateTagAttr(tag, "pathSuffix", R.styleable.AndroidManifestData_pathSuffix, 4000)
validateTagAttr(tag, "pathAdvancedPattern",
R.styleable.AndroidManifestData_pathAdvancedPattern, 4000)
validateTagAttr(
tag,
"pathAdvancedPattern",
R.styleable.AndroidManifestData_pathAdvancedPattern,
4000
)
validateTagAttr(tag, "mimeType", R.styleable.AndroidManifestData_mimeType, 512)
}
@@ -365,8 +467,12 @@ class AndroidPackageParsingValidationTest {
fun parsePermissionTag() {
val tag = "permission"
validateTagAttr(tag, "name", R.styleable.AndroidManifestPermission_name, 1024)
validateTagAttr(tag, "permissionGroup",
R.styleable.AndroidManifestPermission_permissionGroup, 256)
validateTagAttr(
tag,
"permissionGroup",
R.styleable.AndroidManifestPermission_permissionGroup,
256
)
}
@Test
@@ -386,14 +492,18 @@ class AndroidPackageParsingValidationTest {
try {
validator.validateStrAttr(pullParser, attr, name)
} catch (e: SecurityException) {
fail("Failed to parse attribute $attr in <$tag> as valid Java class name:" +
" ${e.message}")
fail(
"Failed to parse attribute $attr in <$tag> as valid Java class name:" +
" ${e.message}"
)
}
try {
validator.validateResStrAttr(pullParser, index, name)
} catch (e: SecurityException) {
fail("Failed to parse attribute $attr in <$tag> as valid Java class name:" +
" ${e.message}")
fail(
"Failed to parse attribute $attr in <$tag> as valid Java class name:" +
" ${e.message}"
)
}
}
@@ -404,13 +514,17 @@ class AndroidPackageParsingValidationTest {
val validator = Validator()
pullParser.nextTag()
validator.validate(pullParser)
val e1 = assertThrows("$name is not valid Java class name",
SecurityException::class.java) {
val e1 = assertThrows(
"$name is not valid Java class name",
SecurityException::class.java
) {
validator.validateStrAttr(pullParser, attr, name)
}
assertEquals(expectedAttrComponentNameErrorMsg(name), e1.message)
val e2 = assertThrows("$name is not valid Java class name",
SecurityException::class.java) {
val e2 = assertThrows(
"$name is not valid Java class name",
SecurityException::class.java
) {
validator.validateResStrAttr(pullParser, index, name)
}
assertEquals(expectedAttrComponentNameErrorMsg(name), e2.message)
@@ -437,15 +551,19 @@ class AndroidPackageParsingValidationTest {
try {
validator.validateStrAttr(pullParser, name, value)
} catch (e: SecurityException) {
fail("Failed to parse valid <$tag> attribute $name with max length of $maxLen:" +
" ${e.message}")
fail(
"Failed to parse valid <$tag> attribute $name with max length of $maxLen:" +
" ${e.message}"
)
}
if (index != null) {
try {
validator.validateResStrAttr(pullParser, index, value)
} catch (e: SecurityException) {
fail("Failed to parse valid <$tag> resource string attribute $name with max" +
" length of $maxLen: ${e.message}")
fail(
"Failed to parse valid <$tag> resource string attribute $name with max" +
" length of $maxLen: ${e.message}"
)
}
}
}
@@ -485,8 +603,10 @@ class AndroidPackageParsingValidationTest {
try {
parseXmlStr(xml)
} catch (e: SecurityException) {
fail("Failed to parse <$tag> with max count limit of $maxNum under" +
" <$parentTag>: ${e.message}")
fail(
"Failed to parse <$tag> with max count limit of $maxNum under" +
" <$parentTag>: ${e.message}"
)
}
}