Allow integer_overflow sanitizer path exclusion.
Add support for excluding paths from having integer_overflow applied to them when using SANITIZE_TARGET=integer_overflow via an INTEGER_OVERFLOW_EXCLUDE_PATHS make variable. This covers the soong side of the change. Bug: 30969751 Test: Build with SANITIZE_TARGET=integer_overflow SANITIZE_TARGET_DIAG=integer_overflow INTEGER_OVERFLOW_EXCLUDE_PATHS=<path> and confirmed this was no longer being applied to binaries in that path. Change-Id: I298b772f5425da28dff1cf007825be19558db3a8
This commit is contained in:
parent
da4a7257b5
commit
5f59553bca
|
@ -530,20 +530,21 @@ func (c *deviceConfig) NativeCoverageEnabled() bool {
|
|||
func (c *deviceConfig) CoverageEnabledForPath(path string) bool {
|
||||
coverage := false
|
||||
if c.config.ProductVariables.CoveragePaths != nil {
|
||||
for _, prefix := range *c.config.ProductVariables.CoveragePaths {
|
||||
if strings.HasPrefix(path, prefix) {
|
||||
if prefixInList(path, *c.config.ProductVariables.CoveragePaths) {
|
||||
coverage = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
if coverage && c.config.ProductVariables.CoverageExcludePaths != nil {
|
||||
for _, prefix := range *c.config.ProductVariables.CoverageExcludePaths {
|
||||
if strings.HasPrefix(path, prefix) {
|
||||
if prefixInList(path, *c.config.ProductVariables.CoverageExcludePaths) {
|
||||
coverage = false
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
return coverage
|
||||
}
|
||||
|
||||
func (c *config) IntegerOverflowDisabledForPath(path string) bool {
|
||||
if c.ProductVariables.IntegerOverflowExcludePaths == nil {
|
||||
return false
|
||||
}
|
||||
return prefixInList(path, *c.ProductVariables.IntegerOverflowExcludePaths)
|
||||
}
|
||||
|
|
|
@ -68,6 +68,15 @@ func inList(s string, list []string) bool {
|
|||
return indexList(s, list) != -1
|
||||
}
|
||||
|
||||
func prefixInList(s string, list []string) bool {
|
||||
for _, prefix := range list {
|
||||
if strings.HasPrefix(s, prefix) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// checkCalledFromInit panics if a Go package's init function is not on the
|
||||
// call stack.
|
||||
func checkCalledFromInit() {
|
||||
|
|
|
@ -140,6 +140,8 @@ type productVariables struct {
|
|||
Treble *bool `json:",omitempty"`
|
||||
Pdk *bool `json:",omitempty"`
|
||||
|
||||
IntegerOverflowExcludePaths *[]string `json:",omitempty"`
|
||||
|
||||
VendorPath *string `json:",omitempty"`
|
||||
|
||||
ClangTidy *bool `json:",omitempty"`
|
||||
|
|
|
@ -188,8 +188,10 @@ func (sanitize *sanitize) begin(ctx BaseModuleContext) {
|
|||
}
|
||||
|
||||
if found, globalSanitizers = removeFromList("integer_overflow", globalSanitizers); found && s.Integer_overflow == nil {
|
||||
if !ctx.AConfig().IntegerOverflowDisabledForPath(ctx.ModuleDir()) {
|
||||
s.Integer_overflow = boolPtr(true)
|
||||
}
|
||||
}
|
||||
|
||||
if len(globalSanitizers) > 0 {
|
||||
ctx.ModuleErrorf("unknown global sanitizer option %s", globalSanitizers[0])
|
||||
|
|
Loading…
Reference in New Issue