fix infinite loop when parsing specially-crafted headers (#521)

This commit is contained in:
Alessandro Ros
2024-02-21 23:36:35 +01:00
committed by GitHub
parent 4a8bcf3634
commit 55fa72f0c2
4 changed files with 18 additions and 29 deletions

View File

@@ -49,7 +49,6 @@ func keyValParse(str string, separator byte) (map[string]string, error) {
var k string var k string
k, str = readKey(str, separator) k, str = readKey(str, separator)
if len(k) > 0 {
if len(str) > 0 && str[0] == '=' { if len(str) > 0 && str[0] == '=' {
var v string var v string
var err error var err error
@@ -62,7 +61,6 @@ func keyValParse(str string, separator byte) (map[string]string, error) {
} else { } else {
ret[k] = "" ret[k] = ""
} }
}
// skip separator // skip separator
if len(str) > 0 && str[0] == separator { if len(str) > 0 && str[0] == separator {

View File

@@ -85,21 +85,8 @@ func TestKeyValParse(t *testing.T) {
} }
} }
func TestKeyValParseErrors(t *testing.T) { func FuzzKeyValParse(f *testing.F) {
for _, ca := range []struct { f.Fuzz(func(t *testing.T, b string) {
name string keyValParse(b, ',') //nolint:errcheck
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)
}) })
} }
}

View File

@@ -0,0 +1,2 @@
go test fuzz v1
string("=\"")

View File

@@ -0,0 +1,2 @@
go test fuzz v1
string("=\x84")