Respect '' received from aquery

GoCompilePkg action's aquery results contains ''. e.g (the interesting
ones)
```
/bin/bulder ... -embedroot '' -gcflags '' -asmflags ''
```

strings.Join would cause it to appear as a whitespace and cause issues.
(in ninja without this CL)
```
/bin/builder ... -embedroot  -gcflags  -asmflags
```

Convert the empty literal to '' before strings.Join

To limit inadvertent side-effects, this limits it to GoCompilePkg mnemonic

Test: TH
Change-Id: I67161c194dabac6f857ff49b85d4b2471970a9b2
This commit is contained in:
Spandan Das 2023-06-16 23:35:55 +00:00
parent 3b7411adc7
commit da724863da

View file

@ -453,8 +453,32 @@ func (a *aqueryArtifactHandler) depsetContentHashes(inputDepsetIds []uint32) ([]
return hashes, nil
}
// escapes the args received from aquery and creates a command string
func commandString(actionEntry *analysis_v2_proto.Action) string {
switch actionEntry.Mnemonic {
case "GoCompilePkg":
argsEscaped := []string{}
for _, arg := range actionEntry.Arguments {
if arg == "" {
// If this is an empty string, add ''
// And not
// 1. (literal empty)
// 2. `''\'''\'''` (escaped version of '')
//
// If we had used (1), then this would appear as a whitespace when we strings.Join
argsEscaped = append(argsEscaped, "''")
} else {
argsEscaped = append(argsEscaped, proptools.ShellEscapeIncludingSpaces(arg))
}
}
return strings.Join(argsEscaped, " ")
default:
return strings.Join(proptools.ShellEscapeListIncludingSpaces(actionEntry.Arguments), " ")
}
}
func (a *aqueryArtifactHandler) normalActionBuildStatement(actionEntry *analysis_v2_proto.Action) (*BuildStatement, error) {
command := strings.Join(proptools.ShellEscapeListIncludingSpaces(actionEntry.Arguments), " ")
command := commandString(actionEntry)
inputDepsetHashes, err := a.depsetContentHashes(actionEntry.InputDepSetIds)
if err != nil {
return nil, err