Loading android/neverallow.go +47 −10 Original line number Diff line number Diff line Loading @@ -165,9 +165,39 @@ func neverallowMutator(ctx BottomUpMutatorContext) { } } type ValueMatcher interface { test(string) bool String() string } type equalMatcher struct { expected string } func (m *equalMatcher) test(value string) bool { return m.expected == value } func (m *equalMatcher) String() string { return "=" + m.expected } type anyMatcher struct { } func (m *anyMatcher) test(value string) bool { return true } func (m *anyMatcher) String() string { return "=*" } var anyMatcherInstance = &anyMatcher{} type ruleProperty struct { fields []string // e.x.: Vndk.Enabled value string // e.x.: true matcher ValueMatcher } // A NeverAllow rule. Loading Loading @@ -229,7 +259,7 @@ func (r *rule) NotModuleType(types ...string) Rule { func (r *rule) With(properties, value string) Rule { r.props = append(r.props, ruleProperty{ fields: fieldNamesForProperties(properties), value: value, matcher: selectMatcher(value), }) return r } Loading @@ -237,11 +267,18 @@ func (r *rule) With(properties, value string) Rule { func (r *rule) Without(properties, value string) Rule { r.unlessProps = append(r.unlessProps, ruleProperty{ fields: fieldNamesForProperties(properties), value: value, matcher: selectMatcher(value), }) return r } func selectMatcher(expected string) ValueMatcher { if expected == "*" { return anyMatcherInstance } return &equalMatcher{expected: expected} } func (r *rule) Because(reason string) Rule { r.reason = reason return r Loading @@ -262,10 +299,10 @@ func (r *rule) String() string { s += " -type:" + v } for _, v := range r.props { s += " " + strings.Join(v.fields, ".") + "=" + v.value s += " " + strings.Join(v.fields, ".") + v.matcher.String() } for _, v := range r.unlessProps { s += " -" + strings.Join(v.fields, ".") + "=" + v.value s += " -" + strings.Join(v.fields, ".") + v.matcher.String() } if len(r.reason) != 0 { s += " which is restricted because " + r.reason Loading Loading @@ -347,8 +384,8 @@ func hasProperty(properties []interface{}, prop ruleProperty) bool { continue } check := func(v string) bool { return prop.value == "*" || prop.value == v check := func(value string) bool { return prop.matcher.test(value) } if matchValue(propertiesValue, check) { Loading Loading
android/neverallow.go +47 −10 Original line number Diff line number Diff line Loading @@ -165,9 +165,39 @@ func neverallowMutator(ctx BottomUpMutatorContext) { } } type ValueMatcher interface { test(string) bool String() string } type equalMatcher struct { expected string } func (m *equalMatcher) test(value string) bool { return m.expected == value } func (m *equalMatcher) String() string { return "=" + m.expected } type anyMatcher struct { } func (m *anyMatcher) test(value string) bool { return true } func (m *anyMatcher) String() string { return "=*" } var anyMatcherInstance = &anyMatcher{} type ruleProperty struct { fields []string // e.x.: Vndk.Enabled value string // e.x.: true matcher ValueMatcher } // A NeverAllow rule. Loading Loading @@ -229,7 +259,7 @@ func (r *rule) NotModuleType(types ...string) Rule { func (r *rule) With(properties, value string) Rule { r.props = append(r.props, ruleProperty{ fields: fieldNamesForProperties(properties), value: value, matcher: selectMatcher(value), }) return r } Loading @@ -237,11 +267,18 @@ func (r *rule) With(properties, value string) Rule { func (r *rule) Without(properties, value string) Rule { r.unlessProps = append(r.unlessProps, ruleProperty{ fields: fieldNamesForProperties(properties), value: value, matcher: selectMatcher(value), }) return r } func selectMatcher(expected string) ValueMatcher { if expected == "*" { return anyMatcherInstance } return &equalMatcher{expected: expected} } func (r *rule) Because(reason string) Rule { r.reason = reason return r Loading @@ -262,10 +299,10 @@ func (r *rule) String() string { s += " -type:" + v } for _, v := range r.props { s += " " + strings.Join(v.fields, ".") + "=" + v.value s += " " + strings.Join(v.fields, ".") + v.matcher.String() } for _, v := range r.unlessProps { s += " -" + strings.Join(v.fields, ".") + "=" + v.value s += " -" + strings.Join(v.fields, ".") + v.matcher.String() } if len(r.reason) != 0 { s += " which is restricted because " + r.reason Loading Loading @@ -347,8 +384,8 @@ func hasProperty(properties []interface{}, prop ruleProperty) bool { continue } check := func(v string) bool { return prop.value == "*" || prop.value == v check := func(value string) bool { return prop.matcher.test(value) } if matchValue(propertiesValue, check) { Loading