Browse Source

influxdb: escape backslashes in tag values (for alerting)

Closes #10957. Backslash escaping was already implemented on the
frontend but does not work for queries executed on the backend.
Daniel Lee 7 years ago
parent
commit
f959ba9bcf
2 changed files with 7 additions and 1 deletions
  1. 1 1
      pkg/tsdb/influxdb/query.go
  2. 6 0
      pkg/tsdb/influxdb/query_test.go

+ 1 - 1
pkg/tsdb/influxdb/query.go

@@ -70,7 +70,7 @@ func (query *Query) renderTags() []string {
 		} else if tag.Operator == "<" || tag.Operator == ">" {
 			textValue = tag.Value
 		} else {
-			textValue = fmt.Sprintf("'%s'", tag.Value)
+			textValue = fmt.Sprintf("'%s'", strings.Replace(tag.Value, `\`, `\\`, -1))
 		}
 
 		res = append(res, fmt.Sprintf(`%s"%s" %s %s`, str, tag.Key, tag.Operator, textValue))

+ 6 - 0
pkg/tsdb/influxdb/query_test.go

@@ -170,6 +170,12 @@ func TestInfluxdbQueryBuilder(t *testing.T) {
 			So(strings.Join(query.renderTags(), ""), ShouldEqual, `"key" = 'value'`)
 		})
 
+		Convey("can escape backslashes when rendering string tags", func() {
+			query := &Query{Tags: []*Tag{{Operator: "=", Value: `C:\test\`, Key: "key"}}}
+
+			So(strings.Join(query.renderTags(), ""), ShouldEqual, `"key" = 'C:\\test\\'`)
+		})
+
 		Convey("can render regular measurement", func() {
 			query := &Query{Measurement: `apa`, Policy: "policy"}