From 9ee87ab7c382078843e88e2537865541cdf4799d Mon Sep 17 00:00:00 2001 From: Roger Peppe Date: Wed, 30 Sep 2020 18:26:00 +0100 Subject: [PATCH] fix: plugins/parsers/influx: avoid ParseError.Error panic (#8177) --- plugins/parsers/influx/parser.go | 4 ++-- plugins/parsers/influx/parser_test.go | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/plugins/parsers/influx/parser.go b/plugins/parsers/influx/parser.go index 620104ac6..f85435ed5 100644 --- a/plugins/parsers/influx/parser.go +++ b/plugins/parsers/influx/parser.go @@ -33,9 +33,9 @@ type ParseError struct { func (e *ParseError) Error() string { buffer := e.buf[e.LineOffset:] - eol := strings.IndexAny(buffer, "\r\n") + eol := strings.IndexAny(buffer, "\n") if eol >= 0 { - buffer = buffer[:eol] + buffer = strings.TrimSuffix(buffer[:eol], "\r") } if len(buffer) > maxErrorBufferSize { startEllipsis := true diff --git a/plugins/parsers/influx/parser_test.go b/plugins/parsers/influx/parser_test.go index 569eb3a22..5c780f070 100644 --- a/plugins/parsers/influx/parser_test.go +++ b/plugins/parsers/influx/parser_test.go @@ -751,6 +751,18 @@ func TestSeriesParser(t *testing.T) { buf: "cpu,a=", }, }, + { + name: "error with carriage return in long line", + input: []byte("cpu,a=" + strings.Repeat("x", maxErrorBufferSize) + "\rcd,b"), + metrics: []telegraf.Metric{}, + err: &ParseError{ + Offset: 1031, + LineNumber: 1, + Column: 1032, + msg: "parse error", + buf: "cpu,a=" + strings.Repeat("x", maxErrorBufferSize) + "\rcd,b", + }, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -762,6 +774,9 @@ func TestSeriesParser(t *testing.T) { metrics, err := parser.Parse(tt.input) require.Equal(t, tt.err, err) + if err != nil { + require.Equal(t, tt.err.Error(), err.Error()) + } require.Equal(t, len(tt.metrics), len(metrics)) for i, expected := range tt.metrics {