Add bpfix to remove sanitize.scudo
scudo is not supported for Android 11+, sanitize.scudo is deprecated, when running bpfix, remove it. Test: go test bpfix tests Change-Id: Ibb58bb302df3bad24cfce3ae98c65015c090853c
This commit is contained in:
parent
1a0e2d20b3
commit
fbf51b67c9
2 changed files with 229 additions and 19 deletions
|
@ -130,7 +130,11 @@ var fixSteps = []FixStep{
|
|||
},
|
||||
{
|
||||
Name: "removePdkProperty",
|
||||
Fix: runPatchListMod(removePdkProperty),
|
||||
Fix: runPatchListMod(removeObsoleteProperty("product_variables.pdk")),
|
||||
},
|
||||
{
|
||||
Name: "removeScudoProperty",
|
||||
Fix: runPatchListMod(removeObsoleteProperty("sanitize.scudo")),
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -863,7 +867,9 @@ func convertToSingleSource(mod *parser.Module, srcPropertyName string) {
|
|||
}
|
||||
}
|
||||
|
||||
func runPatchListMod(modFunc func(mod *parser.Module, buf []byte, patchlist *parser.PatchList) error) func(*Fixer) error {
|
||||
type patchListModFunction func(*parser.Module, []byte, *parser.PatchList) error
|
||||
|
||||
func runPatchListMod(modFunc patchListModFunction) func(*Fixer) error {
|
||||
return func(f *Fixer) error {
|
||||
// Make sure all the offsets are accurate
|
||||
buf, err := f.reparse()
|
||||
|
@ -1033,23 +1039,63 @@ func removeTags(mod *parser.Module, buf []byte, patchlist *parser.PatchList) err
|
|||
return patchlist.Add(prop.Pos().Offset, prop.End().Offset+2, replaceStr)
|
||||
}
|
||||
|
||||
func removePdkProperty(mod *parser.Module, buf []byte, patchlist *parser.PatchList) error {
|
||||
prop, ok := mod.GetProperty("product_variables")
|
||||
if !ok {
|
||||
return nil
|
||||
type propertyProvider interface {
|
||||
GetProperty(string) (*parser.Property, bool)
|
||||
RemoveProperty(string) bool
|
||||
}
|
||||
|
||||
func removeNestedProperty(mod *parser.Module, patchList *parser.PatchList, propName string) error {
|
||||
propNames := strings.Split(propName, ".")
|
||||
|
||||
var propProvider, toRemoveFrom propertyProvider
|
||||
propProvider = mod
|
||||
|
||||
var propToRemove *parser.Property
|
||||
for i, name := range propNames {
|
||||
p, ok := propProvider.GetProperty(name)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
// if this is the inner most element, it's time to delete
|
||||
if i == len(propNames)-1 {
|
||||
if propToRemove == nil {
|
||||
// if we cannot remove the properties that the current property is nested in,
|
||||
// remove only the current property
|
||||
propToRemove = p
|
||||
toRemoveFrom = propProvider
|
||||
}
|
||||
|
||||
// remove the property from the list, in case we remove other properties in this list
|
||||
toRemoveFrom.RemoveProperty(propToRemove.Name)
|
||||
// only removing the property would leave blank line(s), remove with a patch
|
||||
if err := patchList.Add(propToRemove.Pos().Offset, propToRemove.End().Offset+2, ""); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
propMap, ok := p.Value.(*parser.Map)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
if len(propMap.Properties) > 1 {
|
||||
// if there are other properties in this struct, we need to keep this struct
|
||||
toRemoveFrom = nil
|
||||
propToRemove = nil
|
||||
} else if propToRemove == nil {
|
||||
// otherwise, we can remove the empty struct entirely
|
||||
toRemoveFrom = propProvider
|
||||
propToRemove = p
|
||||
}
|
||||
propProvider = propMap
|
||||
}
|
||||
}
|
||||
propMap, ok := prop.Value.(*parser.Map)
|
||||
if !ok {
|
||||
return nil
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func removeObsoleteProperty(propName string) patchListModFunction {
|
||||
return func(mod *parser.Module, buf []byte, patchList *parser.PatchList) error {
|
||||
return removeNestedProperty(mod, patchList, propName)
|
||||
}
|
||||
pdkProp, ok := propMap.GetProperty("pdk")
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
if len(propMap.Properties) > 1 {
|
||||
return patchlist.Add(pdkProp.Pos().Offset, pdkProp.End().Offset+2, "")
|
||||
}
|
||||
return patchlist.Add(prop.Pos().Offset, prop.End().Offset+2, "")
|
||||
}
|
||||
|
||||
func mergeMatchingModuleProperties(mod *parser.Module, buf []byte, patchlist *parser.PatchList) error {
|
||||
|
|
|
@ -999,7 +999,171 @@ func TestRemoveSoongConfigBoolVariable(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestRemovePdkProperty(t *testing.T) {
|
||||
func TestRemoveNestedProperty(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
in string
|
||||
out string
|
||||
propertyName string
|
||||
}{
|
||||
{
|
||||
name: "remove no nesting",
|
||||
in: `
|
||||
cc_library {
|
||||
name: "foo",
|
||||
foo: true,
|
||||
}`,
|
||||
out: `
|
||||
cc_library {
|
||||
name: "foo",
|
||||
}
|
||||
`,
|
||||
propertyName: "foo",
|
||||
},
|
||||
{
|
||||
name: "remove one nest",
|
||||
in: `
|
||||
cc_library {
|
||||
name: "foo",
|
||||
foo: {
|
||||
bar: true,
|
||||
},
|
||||
}`,
|
||||
out: `
|
||||
cc_library {
|
||||
name: "foo",
|
||||
}
|
||||
`,
|
||||
propertyName: "foo.bar",
|
||||
},
|
||||
{
|
||||
name: "remove one nest, multiple props",
|
||||
in: `
|
||||
cc_library {
|
||||
name: "foo",
|
||||
foo: {
|
||||
bar: true,
|
||||
baz: false,
|
||||
},
|
||||
}`,
|
||||
out: `
|
||||
cc_library {
|
||||
name: "foo",
|
||||
foo: {
|
||||
baz: false,
|
||||
},
|
||||
}
|
||||
`,
|
||||
propertyName: "foo.bar",
|
||||
},
|
||||
{
|
||||
name: "remove multiple nest",
|
||||
in: `
|
||||
cc_library {
|
||||
name: "foo",
|
||||
foo: {
|
||||
bar: {
|
||||
baz: {
|
||||
a: true,
|
||||
}
|
||||
},
|
||||
},
|
||||
}`,
|
||||
out: `
|
||||
cc_library {
|
||||
name: "foo",
|
||||
}
|
||||
`,
|
||||
propertyName: "foo.bar.baz.a",
|
||||
},
|
||||
{
|
||||
name: "remove multiple nest, outer non-empty",
|
||||
in: `
|
||||
cc_library {
|
||||
name: "foo",
|
||||
foo: {
|
||||
bar: {
|
||||
baz: {
|
||||
a: true,
|
||||
}
|
||||
},
|
||||
other: true,
|
||||
},
|
||||
}`,
|
||||
out: `
|
||||
cc_library {
|
||||
name: "foo",
|
||||
foo: {
|
||||
other: true,
|
||||
},
|
||||
}
|
||||
`,
|
||||
propertyName: "foo.bar.baz.a",
|
||||
},
|
||||
{
|
||||
name: "remove multiple nest, inner non-empty",
|
||||
in: `
|
||||
cc_library {
|
||||
name: "foo",
|
||||
foo: {
|
||||
bar: {
|
||||
baz: {
|
||||
a: true,
|
||||
},
|
||||
other: true,
|
||||
},
|
||||
},
|
||||
}`,
|
||||
out: `
|
||||
cc_library {
|
||||
name: "foo",
|
||||
foo: {
|
||||
bar: {
|
||||
other: true,
|
||||
},
|
||||
},
|
||||
}
|
||||
`,
|
||||
propertyName: "foo.bar.baz.a",
|
||||
},
|
||||
{
|
||||
name: "remove multiple nest, inner-most non-empty",
|
||||
in: `
|
||||
cc_library {
|
||||
name: "foo",
|
||||
foo: {
|
||||
bar: {
|
||||
baz: {
|
||||
a: true,
|
||||
other: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
}`,
|
||||
out: `
|
||||
cc_library {
|
||||
name: "foo",
|
||||
foo: {
|
||||
bar: {
|
||||
baz: {
|
||||
other: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
`,
|
||||
propertyName: "foo.bar.baz.a",
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
runPass(t, test.in, test.out, runPatchListMod(removeObsoleteProperty(test.propertyName)))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestRemoveObsoleteProperties(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
in string
|
||||
|
@ -1052,7 +1216,7 @@ func TestRemovePdkProperty(t *testing.T) {
|
|||
}
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
runPass(t, test.in, test.out, runPatchListMod(removePdkProperty))
|
||||
runPass(t, test.in, test.out, runPatchListMod(removeObsoleteProperty("product_variables.pdk")))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue