diff --git a/pkg/headers/keyval.go b/pkg/headers/keyval.go index 11515971..bd72e27a 100644 --- a/pkg/headers/keyval.go +++ b/pkg/headers/keyval.go @@ -49,19 +49,17 @@ func keyValParse(str string, separator byte) (map[string]string, error) { var k string k, str = readKey(str, separator) - if len(k) > 0 { - if len(str) > 0 && str[0] == '=' { - var v string - var err error - v, str, err = readValue(origstr, str[1:], separator) - if err != nil { - return nil, err - } - - ret[k] = v - } else { - ret[k] = "" + if len(str) > 0 && str[0] == '=' { + var v string + var err error + v, str, err = readValue(origstr, str[1:], separator) + if err != nil { + return nil, err } + + ret[k] = v + } else { + ret[k] = "" } // skip separator diff --git a/pkg/headers/keyval_test.go b/pkg/headers/keyval_test.go index 1408ce93..75283d71 100644 --- a/pkg/headers/keyval_test.go +++ b/pkg/headers/keyval_test.go @@ -85,21 +85,8 @@ func TestKeyValParse(t *testing.T) { } } -func TestKeyValParseErrors(t *testing.T) { - for _, ca := range []struct { - name string - s string - err string - }{ - { - "apexes not closed", - `key1="v,1`, - "apexes not closed (key1=\"v,1)", - }, - } { - t.Run(ca.name, func(t *testing.T) { - _, err := keyValParse(ca.s, ',') - require.EqualError(t, err, ca.err) - }) - } +func FuzzKeyValParse(f *testing.F) { + f.Fuzz(func(t *testing.T, b string) { + keyValParse(b, ',') //nolint:errcheck + }) } diff --git a/pkg/headers/testdata/fuzz/FuzzKeyValParse/15422aae47040b82 b/pkg/headers/testdata/fuzz/FuzzKeyValParse/15422aae47040b82 new file mode 100644 index 00000000..2454251f --- /dev/null +++ b/pkg/headers/testdata/fuzz/FuzzKeyValParse/15422aae47040b82 @@ -0,0 +1,2 @@ +go test fuzz v1 +string("=\"") diff --git a/pkg/headers/testdata/fuzz/FuzzKeyValParse/32a837cd12bd2cfa b/pkg/headers/testdata/fuzz/FuzzKeyValParse/32a837cd12bd2cfa new file mode 100644 index 00000000..d32193ac --- /dev/null +++ b/pkg/headers/testdata/fuzz/FuzzKeyValParse/32a837cd12bd2cfa @@ -0,0 +1,2 @@ +go test fuzz v1 +string("=\x84")