mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 15:16:51 +08:00
fix infinite loop when parsing specially-crafted headers (#521)
This commit is contained in:
@@ -49,7 +49,6 @@ 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
|
||||
@@ -62,7 +61,6 @@ func keyValParse(str string, separator byte) (map[string]string, error) {
|
||||
} else {
|
||||
ret[k] = ""
|
||||
}
|
||||
}
|
||||
|
||||
// skip separator
|
||||
if len(str) > 0 && str[0] == separator {
|
||||
|
@@ -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
|
||||
})
|
||||
}
|
||||
}
|
||||
|
2
pkg/headers/testdata/fuzz/FuzzKeyValParse/15422aae47040b82
vendored
Normal file
2
pkg/headers/testdata/fuzz/FuzzKeyValParse/15422aae47040b82
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
go test fuzz v1
|
||||
string("=\"")
|
2
pkg/headers/testdata/fuzz/FuzzKeyValParse/32a837cd12bd2cfa
vendored
Normal file
2
pkg/headers/testdata/fuzz/FuzzKeyValParse/32a837cd12bd2cfa
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
go test fuzz v1
|
||||
string("=\x84")
|
Reference in New Issue
Block a user