Ignore UTF8 BOM in JSON parser (#4099)

(cherry picked from commit 9647ea88ea)
This commit is contained in:
Daniel Meiners 2018-05-03 20:40:28 +02:00 committed by Daniel Nelson
parent ae9e77dab8
commit f21f31a08a
No known key found for this signature in database
GPG Key ID: CAAD59C9444F6155
2 changed files with 17 additions and 0 deletions

View File

@ -12,6 +12,10 @@ import (
"github.com/influxdata/telegraf/metric" "github.com/influxdata/telegraf/metric"
) )
var (
utf8BOM = []byte("\xef\xbb\xbf")
)
type JSONParser struct { type JSONParser struct {
MetricName string MetricName string
TagKeys []string TagKeys []string
@ -68,6 +72,7 @@ func (p *JSONParser) parseObject(metrics []telegraf.Metric, jsonOut map[string]i
func (p *JSONParser) Parse(buf []byte) ([]telegraf.Metric, error) { func (p *JSONParser) Parse(buf []byte) ([]telegraf.Metric, error) {
buf = bytes.TrimSpace(buf) buf = bytes.TrimSpace(buf)
buf = bytes.TrimPrefix(buf, utf8BOM)
if len(buf) == 0 { if len(buf) == 0 {
return make([]telegraf.Metric, 0), nil return make([]telegraf.Metric, 0), nil
} }

View File

@ -428,3 +428,15 @@ func TestParseArrayWithTagKeys(t *testing.T) {
"othertag": "baz", "othertag": "baz",
}, metrics[1].Tags()) }, metrics[1].Tags())
} }
var jsonBOM = []byte("\xef\xbb\xbf[{\"value\":17}]")
func TestHttpJsonBOM(t *testing.T) {
parser := JSONParser{
MetricName: "json_test",
}
// Most basic vanilla test
_, err := parser.Parse(jsonBOM)
assert.NoError(t, err)
}