From 42640b1def4c9fbf35be358eba1c9496ed1196b8 Mon Sep 17 00:00:00 2001 From: Joshua Powers Date: Tue, 13 Dec 2022 06:41:08 -0700 Subject: [PATCH] test(parsers.json): add fuzz test (#12368) --- internal/fuzz/json.go | 42 +++++++++++++++++++++++++++++ plugins/parsers/json/parser_test.go | 21 +++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 internal/fuzz/json.go diff --git a/internal/fuzz/json.go b/internal/fuzz/json.go new file mode 100644 index 000000000..54faef6b2 --- /dev/null +++ b/internal/fuzz/json.go @@ -0,0 +1,42 @@ +package fuzz + +// https://github.com/google/AFL/blob/master/dictionaries/json.dict +var JSONDictionary = []string{ + "0", + ",0", + ":0", + "0:", + "-1.2e+3", + "true", + "false", + "null", + "\"\"", + ",\"\"", + ":\"\"", + "\"\":", + "{}", + ",{}", + ":{}", + "{\"\":0}", + "{{}}", + "[]", + ",[]", + ":[]", + "[0]", + "[[]]", + "''", + "\\", + "\\b", + "\\f", + "\\n", + "\\r", + "\\t", + "\\u0000", + "\\x00", + "\\0", + "\\uD800\\uDC00", + "\\uDBFF\\uDFFF", + "\"\":0", + "//", + "/**/", +} diff --git a/plugins/parsers/json/parser_test.go b/plugins/parsers/json/parser_test.go index 7f8cb2a62..a425b77ed 100644 --- a/plugins/parsers/json/parser_test.go +++ b/plugins/parsers/json/parser_test.go @@ -6,6 +6,7 @@ import ( "time" "github.com/influxdata/telegraf" + "github.com/influxdata/telegraf/internal/fuzz" "github.com/influxdata/telegraf/testutil" "github.com/stretchr/testify/require" ) @@ -1356,3 +1357,23 @@ func TestParseArrayWithWildcardTagKeys(t *testing.T) { }) } } + +func FuzzParserJSON(f *testing.F) { + for _, value := range fuzz.JSONDictionary { + f.Add([]byte(value)) + } + + f.Add([]byte(validJSON)) + f.Add([]byte(validJSONArray)) + f.Add([]byte(validJSONArrayMultiple)) + f.Add([]byte(validJSONArrayTags)) + f.Add([]byte(validJSONNewline)) + f.Add([]byte(validJSONTags)) + + parser := &Parser{MetricName: "testing"} + require.NoError(f, parser.Init()) + + f.Fuzz(func(t *testing.T, input []byte) { + _, _ = parser.Parse(input) + }) +}