Browse Source

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
Spandan Das 10 months ago
parent
commit
da724863da
1 changed files with 25 additions and 1 deletions
  1. 25 1
      bazel/aquery.go

+ 25 - 1
bazel/aquery.go

@@ -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