From 7c1d1755d8d27531b03c90fcbb79554a93a48169 Mon Sep 17 00:00:00 2001 From: Joshua Powers Date: Wed, 12 Oct 2022 14:08:56 -0500 Subject: [PATCH] fix(parsers.json_v2): Remove BOM before parsing (#11926) --- plugins/parsers/json_v2/parser.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/plugins/parsers/json_v2/parser.go b/plugins/parsers/json_v2/parser.go index 086788e28..5bd215440 100644 --- a/plugins/parsers/json_v2/parser.go +++ b/plugins/parsers/json_v2/parser.go @@ -2,16 +2,19 @@ package json_v2 import ( "fmt" + "io" "strconv" "strings" "time" + "github.com/dimchansky/utfbom" + "github.com/tidwall/gjson" + "github.com/influxdata/telegraf" "github.com/influxdata/telegraf/internal" "github.com/influxdata/telegraf/metric" "github.com/influxdata/telegraf/plugins/parsers" "github.com/influxdata/telegraf/plugins/parsers/temporary/json_v2" - "github.com/tidwall/gjson" ) // Parser adheres to the parser interface, contains the parser configuration, and data required to parse JSON @@ -68,6 +71,13 @@ func (p *Parser) Init() error { } func (p *Parser) Parse(input []byte) ([]telegraf.Metric, error) { + reader := strings.NewReader(string(input)) + body, _ := utfbom.Skip(reader) + input, err := io.ReadAll(body) + if err != nil { + return nil, fmt.Errorf("unable to read body after BOM removal: %v", err) + } + // Only valid JSON is supported if !gjson.Valid(string(input)) { return nil, fmt.Errorf("invalid JSON provided, unable to parse")