analysis/app: escape filters containing spaces
Change-Id: Iedf55dbc792d9cc12fc5d2a0a674628eed8ad726
Reviewed-on: https://go-review.googlesource.com/35945
Reviewed-by: Russ Cox <rsc@golang.org>
diff --git a/analysis/app/compare.go b/analysis/app/compare.go
index 4428a3d..9127879 100644
--- a/analysis/app/compare.go
+++ b/analysis/app/compare.go
@@ -113,6 +113,11 @@
// addToQuery returns a new query string with add applied as a filter.
func addToQuery(query, add string) string {
+ if strings.ContainsAny(add, " \t\\\"") {
+ add = strings.Replace(add, `\`, `\\`, -1)
+ add = strings.Replace(add, `"`, `\"`, -1)
+ add = `"` + add + `"`
+ }
if strings.Contains(query, "|") {
return add + " " + query
}
diff --git a/analysis/app/compare_test.go b/analysis/app/compare_test.go
index f7f92e9..1728ae0 100644
--- a/analysis/app/compare_test.go
+++ b/analysis/app/compare_test.go
@@ -111,3 +111,23 @@
})
}
}
+
+func TestAddToQuery(t *testing.T) {
+ tests := []struct {
+ query, add string
+ want string
+ }{
+ {"one", "two", "two | one"},
+ {"pre | one vs two", "three", "three pre | one vs two"},
+ {"four", "five six", `"five six" | four`},
+ {"seven", `extra "fun"\problem`, `"extra \"fun\"\\problem" | seven`},
+ {"eight", `ni\"ne`, `"ni\\\"ne" | eight`},
+ }
+ for i, test := range tests {
+ t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
+ if got := addToQuery(test.query, test.add); got != test.want {
+ t.Errorf("addToQuery(%q, %q) = %q, want %q", test.query, test.add, got, test.want)
+ }
+ })
+ }
+}