Revert "Relax apex package restriction for T+ jars"
This reverts commit 1fdd6ca88a
.
Reason for revert: b/205289292 tracks the real fix for this
Test: presubmit
Change-Id: I5a2edaf4f930dafa26659f85d9425e9041c72275
(cherry picked from commit 1d016c50d0ee18ebc81ce7966e616b9936befd5a)
This commit is contained in:
committed by
Spandan Das
parent
652dbcaa9a
commit
ddf8c1bed9
@@ -249,7 +249,7 @@ func neverallowMutator(ctx BottomUpMutatorContext) {
|
||||
continue
|
||||
}
|
||||
|
||||
if !n.appliesToProperties(ctx, properties) {
|
||||
if !n.appliesToProperties(properties) {
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -269,12 +269,8 @@ func neverallowMutator(ctx BottomUpMutatorContext) {
|
||||
}
|
||||
}
|
||||
|
||||
type ValueMatcherContext interface {
|
||||
Config() Config
|
||||
}
|
||||
|
||||
type ValueMatcher interface {
|
||||
Test(ValueMatcherContext, string) bool
|
||||
Test(string) bool
|
||||
String() string
|
||||
}
|
||||
|
||||
@@ -282,7 +278,7 @@ type equalMatcher struct {
|
||||
expected string
|
||||
}
|
||||
|
||||
func (m *equalMatcher) Test(ctx ValueMatcherContext, value string) bool {
|
||||
func (m *equalMatcher) Test(value string) bool {
|
||||
return m.expected == value
|
||||
}
|
||||
|
||||
@@ -293,7 +289,7 @@ func (m *equalMatcher) String() string {
|
||||
type anyMatcher struct {
|
||||
}
|
||||
|
||||
func (m *anyMatcher) Test(ctx ValueMatcherContext, value string) bool {
|
||||
func (m *anyMatcher) Test(value string) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -307,7 +303,7 @@ type startsWithMatcher struct {
|
||||
prefix string
|
||||
}
|
||||
|
||||
func (m *startsWithMatcher) Test(ctx ValueMatcherContext, value string) bool {
|
||||
func (m *startsWithMatcher) Test(value string) bool {
|
||||
return strings.HasPrefix(value, m.prefix)
|
||||
}
|
||||
|
||||
@@ -319,7 +315,7 @@ type regexMatcher struct {
|
||||
re *regexp.Regexp
|
||||
}
|
||||
|
||||
func (m *regexMatcher) Test(ctx ValueMatcherContext, value string) bool {
|
||||
func (m *regexMatcher) Test(value string) bool {
|
||||
return m.re.MatchString(value)
|
||||
}
|
||||
|
||||
@@ -331,7 +327,7 @@ type notInListMatcher struct {
|
||||
allowed []string
|
||||
}
|
||||
|
||||
func (m *notInListMatcher) Test(ctx ValueMatcherContext, value string) bool {
|
||||
func (m *notInListMatcher) Test(value string) bool {
|
||||
return !InList(value, m.allowed)
|
||||
}
|
||||
|
||||
@@ -341,7 +337,7 @@ func (m *notInListMatcher) String() string {
|
||||
|
||||
type isSetMatcher struct{}
|
||||
|
||||
func (m *isSetMatcher) Test(ctx ValueMatcherContext, value string) bool {
|
||||
func (m *isSetMatcher) Test(value string) bool {
|
||||
return value != ""
|
||||
}
|
||||
|
||||
@@ -351,19 +347,6 @@ func (m *isSetMatcher) String() string {
|
||||
|
||||
var isSetMatcherInstance = &isSetMatcher{}
|
||||
|
||||
type sdkVersionMatcher struct {
|
||||
condition func(ctx ValueMatcherContext, spec SdkSpec) bool
|
||||
description string
|
||||
}
|
||||
|
||||
func (m *sdkVersionMatcher) Test(ctx ValueMatcherContext, value string) bool {
|
||||
return m.condition(ctx, SdkSpecFromWithConfig(ctx.Config(), value))
|
||||
}
|
||||
|
||||
func (m *sdkVersionMatcher) String() string {
|
||||
return ".sdk-version(" + m.description + ")"
|
||||
}
|
||||
|
||||
type ruleProperty struct {
|
||||
fields []string // e.x.: Vndk.Enabled
|
||||
matcher ValueMatcher
|
||||
@@ -606,10 +589,9 @@ func (r *rule) appliesToModuleType(moduleType string) bool {
|
||||
return (len(r.moduleTypes) == 0 || InList(moduleType, r.moduleTypes)) && !InList(moduleType, r.unlessModuleTypes)
|
||||
}
|
||||
|
||||
func (r *rule) appliesToProperties(ctx ValueMatcherContext,
|
||||
properties []interface{}) bool {
|
||||
includeProps := hasAllProperties(ctx, properties, r.props)
|
||||
excludeProps := hasAnyProperty(ctx, properties, r.unlessProps)
|
||||
func (r *rule) appliesToProperties(properties []interface{}) bool {
|
||||
includeProps := hasAllProperties(properties, r.props)
|
||||
excludeProps := hasAnyProperty(properties, r.unlessProps)
|
||||
return includeProps && !excludeProps
|
||||
}
|
||||
|
||||
@@ -629,16 +611,6 @@ func NotInList(allowed []string) ValueMatcher {
|
||||
return ¬InListMatcher{allowed}
|
||||
}
|
||||
|
||||
func LessThanSdkVersion(sdk string) ValueMatcher {
|
||||
return &sdkVersionMatcher{
|
||||
condition: func(ctx ValueMatcherContext, spec SdkSpec) bool {
|
||||
return spec.ApiLevel.LessThan(
|
||||
SdkSpecFromWithConfig(ctx.Config(), sdk).ApiLevel)
|
||||
},
|
||||
description: "lessThan=" + sdk,
|
||||
}
|
||||
}
|
||||
|
||||
// assorted utils
|
||||
|
||||
func cleanPaths(paths []string) []string {
|
||||
@@ -657,28 +629,25 @@ func fieldNamesForProperties(propertyNames string) []string {
|
||||
return names
|
||||
}
|
||||
|
||||
func hasAnyProperty(ctx ValueMatcherContext, properties []interface{},
|
||||
props []ruleProperty) bool {
|
||||
func hasAnyProperty(properties []interface{}, props []ruleProperty) bool {
|
||||
for _, v := range props {
|
||||
if hasProperty(ctx, properties, v) {
|
||||
if hasProperty(properties, v) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func hasAllProperties(ctx ValueMatcherContext, properties []interface{},
|
||||
props []ruleProperty) bool {
|
||||
func hasAllProperties(properties []interface{}, props []ruleProperty) bool {
|
||||
for _, v := range props {
|
||||
if !hasProperty(ctx, properties, v) {
|
||||
if !hasProperty(properties, v) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func hasProperty(ctx ValueMatcherContext, properties []interface{},
|
||||
prop ruleProperty) bool {
|
||||
func hasProperty(properties []interface{}, prop ruleProperty) bool {
|
||||
for _, propertyStruct := range properties {
|
||||
propertiesValue := reflect.ValueOf(propertyStruct).Elem()
|
||||
for _, v := range prop.fields {
|
||||
@@ -692,7 +661,7 @@ func hasProperty(ctx ValueMatcherContext, properties []interface{},
|
||||
}
|
||||
|
||||
check := func(value string) bool {
|
||||
return prop.matcher.Test(ctx, value)
|
||||
return prop.matcher.Test(value)
|
||||
}
|
||||
|
||||
if matchValue(propertiesValue, check) {
|
||||
|
@@ -327,48 +327,6 @@ var neverallowTests = []struct {
|
||||
"Only boot images may be imported as a makefile goal.",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "min_sdk too low",
|
||||
fs: map[string][]byte{
|
||||
"Android.bp": []byte(`
|
||||
java_library {
|
||||
name: "min_sdk_too_low",
|
||||
min_sdk_version: "30",
|
||||
}`),
|
||||
},
|
||||
rules: []Rule{
|
||||
NeverAllow().WithMatcher("min_sdk_version", LessThanSdkVersion("31")),
|
||||
},
|
||||
expectedErrors: []string{
|
||||
"module \"min_sdk_too_low\": violates neverallow",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "min_sdk high enough",
|
||||
fs: map[string][]byte{
|
||||
"Android.bp": []byte(`
|
||||
java_library {
|
||||
name: "min_sdk_high_enough",
|
||||
min_sdk_version: "31",
|
||||
}`),
|
||||
},
|
||||
rules: []Rule{
|
||||
NeverAllow().WithMatcher("min_sdk_version", LessThanSdkVersion("31")),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "current min_sdk high enough",
|
||||
fs: map[string][]byte{
|
||||
"Android.bp": []byte(`
|
||||
java_library {
|
||||
name: "current_min_sdk_high_enough",
|
||||
min_sdk_version: "current",
|
||||
}`),
|
||||
},
|
||||
rules: []Rule{
|
||||
NeverAllow().WithMatcher("min_sdk_version", LessThanSdkVersion("31")),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
var prepareForNeverAllowTest = GroupFixturePreparers(
|
||||
@@ -452,10 +410,9 @@ func (p *mockCcLibraryModule) GenerateAndroidBuildActions(ModuleContext) {
|
||||
}
|
||||
|
||||
type mockJavaLibraryProperties struct {
|
||||
Libs []string
|
||||
Min_sdk_version *string
|
||||
Sdk_version *string
|
||||
Uncompress_dex *bool
|
||||
Libs []string
|
||||
Sdk_version *string
|
||||
Uncompress_dex *bool
|
||||
}
|
||||
|
||||
type mockJavaLibraryModule struct {
|
||||
|
@@ -3041,10 +3041,9 @@ func createApexPermittedPackagesRules(modules_packages map[string][]string) []an
|
||||
BootclasspathJar().
|
||||
With("apex_available", module_name).
|
||||
WithMatcher("permitted_packages", android.NotInList(module_packages)).
|
||||
WithMatcher("min_sdk_version", android.LessThanSdkVersion("Tiramisu")).
|
||||
Because("jars that are part of the " + module_name +
|
||||
" module may only use these package prefixes: " + strings.Join(module_packages, ",") +
|
||||
" with min_sdk < T. Please consider the following alternatives:\n" +
|
||||
". Please consider the following alternatives:\n" +
|
||||
" 1. If the offending code is from a statically linked library, consider " +
|
||||
"removing that dependency and using an alternative already in the " +
|
||||
"bootclasspath, or perhaps a shared library." +
|
||||
@@ -3057,7 +3056,7 @@ func createApexPermittedPackagesRules(modules_packages map[string][]string) []an
|
||||
return rules
|
||||
}
|
||||
|
||||
// DO NOT EDIT! These are the package prefixes that are exempted from being AOT'ed by ART on Q/R/S.
|
||||
// DO NOT EDIT! These are the package prefixes that are exempted from being AOT'ed by ART.
|
||||
// Adding code to the bootclasspath in new packages will cause issues on module update.
|
||||
func qModulesPackages() map[string][]string {
|
||||
return map[string][]string{
|
||||
@@ -3071,7 +3070,7 @@ func qModulesPackages() map[string][]string {
|
||||
}
|
||||
}
|
||||
|
||||
// DO NOT EDIT! These are the package prefixes that are exempted from being AOT'ed by ART on R/S.
|
||||
// DO NOT EDIT! These are the package prefixes that are exempted from being AOT'ed by ART.
|
||||
// Adding code to the bootclasspath in new packages will cause issues on module update.
|
||||
func rModulesPackages() map[string][]string {
|
||||
return map[string][]string{
|
||||
|
@@ -7646,7 +7646,6 @@ func TestApexPermittedPackagesRules(t *testing.T) {
|
||||
apex_available: ["myapex"],
|
||||
sdk_version: "none",
|
||||
system_modules: "none",
|
||||
min_sdk_version: "30",
|
||||
}
|
||||
java_library {
|
||||
name: "nonbcp_lib2",
|
||||
@@ -7655,11 +7654,9 @@ func TestApexPermittedPackagesRules(t *testing.T) {
|
||||
permitted_packages: ["a.b"],
|
||||
sdk_version: "none",
|
||||
system_modules: "none",
|
||||
min_sdk_version: "30",
|
||||
}
|
||||
apex {
|
||||
name: "myapex",
|
||||
min_sdk_version: "30",
|
||||
key: "myapex.key",
|
||||
java_libs: ["bcp_lib1", "nonbcp_lib2"],
|
||||
updatable: false,
|
||||
@@ -7672,8 +7669,8 @@ func TestApexPermittedPackagesRules(t *testing.T) {
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Bootclasspath apex jar not satisfying allowed module packages on Q.",
|
||||
expectedError: `(?s)module "bcp_lib2" .* which is restricted because jars that are part of the myapex module may only use these package prefixes: foo.bar with min_sdk < T. Please consider the following alternatives:\n 1. If the offending code is from a statically linked library, consider removing that dependency and using an alternative already in the bootclasspath, or perhaps a shared library. 2. Move the offending code into an allowed package.\n 3. Jarjar the offending code. Please be mindful of the potential system health implications of bundling that code, particularly if the offending jar is part of the bootclasspath.`,
|
||||
name: "Bootclasspath apex jar not satisfying allowed module packages.",
|
||||
expectedError: `(?s)module "bcp_lib2" .* which is restricted because jars that are part of the myapex module may only use these package prefixes: foo.bar. Please consider the following alternatives:\n 1. If the offending code is from a statically linked library, consider removing that dependency and using an alternative already in the bootclasspath, or perhaps a shared library. 2. Move the offending code into an allowed package.\n 3. Jarjar the offending code. Please be mindful of the potential system health implications of bundling that code, particularly if the offending jar is part of the bootclasspath.`,
|
||||
bp: `
|
||||
java_library {
|
||||
name: "bcp_lib1",
|
||||
@@ -7682,7 +7679,6 @@ func TestApexPermittedPackagesRules(t *testing.T) {
|
||||
permitted_packages: ["foo.bar"],
|
||||
sdk_version: "none",
|
||||
system_modules: "none",
|
||||
min_sdk_version: "29",
|
||||
}
|
||||
java_library {
|
||||
name: "bcp_lib2",
|
||||
@@ -7691,85 +7687,9 @@ func TestApexPermittedPackagesRules(t *testing.T) {
|
||||
permitted_packages: ["foo.bar", "bar.baz"],
|
||||
sdk_version: "none",
|
||||
system_modules: "none",
|
||||
min_sdk_version: "29",
|
||||
}
|
||||
apex {
|
||||
name: "myapex",
|
||||
min_sdk_version: "29",
|
||||
key: "myapex.key",
|
||||
java_libs: ["bcp_lib1", "bcp_lib2"],
|
||||
updatable: false,
|
||||
}
|
||||
`,
|
||||
bootJars: []string{"bcp_lib1", "bcp_lib2"},
|
||||
modulesPackages: map[string][]string{
|
||||
"myapex": []string{
|
||||
"foo.bar",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Bootclasspath apex jar not satisfying allowed module packages on R.",
|
||||
expectedError: `(?s)module "bcp_lib2" .* which is restricted because jars that are part of the myapex module may only use these package prefixes: foo.bar with min_sdk < T. Please consider the following alternatives:\n 1. If the offending code is from a statically linked library, consider removing that dependency and using an alternative already in the bootclasspath, or perhaps a shared library. 2. Move the offending code into an allowed package.\n 3. Jarjar the offending code. Please be mindful of the potential system health implications of bundling that code, particularly if the offending jar is part of the bootclasspath.`,
|
||||
bp: `
|
||||
java_library {
|
||||
name: "bcp_lib1",
|
||||
srcs: ["lib1/src/*.java"],
|
||||
apex_available: ["myapex"],
|
||||
permitted_packages: ["foo.bar"],
|
||||
sdk_version: "none",
|
||||
system_modules: "none",
|
||||
min_sdk_version: "30",
|
||||
}
|
||||
java_library {
|
||||
name: "bcp_lib2",
|
||||
srcs: ["lib2/src/*.java"],
|
||||
apex_available: ["myapex"],
|
||||
permitted_packages: ["foo.bar", "bar.baz"],
|
||||
sdk_version: "none",
|
||||
system_modules: "none",
|
||||
min_sdk_version: "30",
|
||||
}
|
||||
apex {
|
||||
name: "myapex",
|
||||
min_sdk_version: "30",
|
||||
key: "myapex.key",
|
||||
java_libs: ["bcp_lib1", "bcp_lib2"],
|
||||
updatable: false,
|
||||
}
|
||||
`,
|
||||
bootJars: []string{"bcp_lib1", "bcp_lib2"},
|
||||
modulesPackages: map[string][]string{
|
||||
"myapex": []string{
|
||||
"foo.bar",
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Bootclasspath apex jar >= T not satisfying Q/R/S allowed module packages.",
|
||||
expectedError: "",
|
||||
bp: `
|
||||
java_library {
|
||||
name: "bcp_lib1",
|
||||
srcs: ["lib1/src/*.java"],
|
||||
apex_available: ["myapex"],
|
||||
permitted_packages: ["foo.bar"],
|
||||
sdk_version: "none",
|
||||
system_modules: "none",
|
||||
min_sdk_version: "current",
|
||||
}
|
||||
java_library {
|
||||
name: "bcp_lib2",
|
||||
srcs: ["lib2/src/*.java"],
|
||||
apex_available: ["myapex"],
|
||||
permitted_packages: ["foo.bar", "bar.baz"],
|
||||
sdk_version: "none",
|
||||
system_modules: "none",
|
||||
min_sdk_version: "current",
|
||||
}
|
||||
apex {
|
||||
name: "myapex",
|
||||
min_sdk_version: "current",
|
||||
key: "myapex.key",
|
||||
java_libs: ["bcp_lib1", "bcp_lib2"],
|
||||
updatable: false,
|
||||
|
Reference in New Issue
Block a user