mirror of
https://github.com/aler9/gortsplib
synced 2025-10-05 23:26:54 +08:00
prevent decoding SDPs without media streams (#769)
This commit is contained in:
@@ -74,6 +74,10 @@ func (d *Session) Unmarshal(ssd *sdp.SessionDescription) error {
|
||||
d.Title = ""
|
||||
}
|
||||
|
||||
if len(ssd.MediaDescriptions) == 0 {
|
||||
return fmt.Errorf("no media streams are present in SDP")
|
||||
}
|
||||
|
||||
d.Medias = make([]*Media, len(ssd.MediaDescriptions))
|
||||
|
||||
for i, md := range ssd.MediaDescriptions {
|
||||
|
@@ -768,12 +768,21 @@ func FuzzSessionUnmarshal(f *testing.F) {
|
||||
"a=rtpmap:101 ulpfec/8000\r\n" +
|
||||
"a=mid:4\r\n")
|
||||
|
||||
f.Fuzz(func(_ *testing.T, enc string) {
|
||||
f.Fuzz(func(t *testing.T, enc string) {
|
||||
var sd sdp.SessionDescription
|
||||
err := sd.Unmarshal([]byte(enc))
|
||||
if err == nil {
|
||||
var desc Session
|
||||
desc.Unmarshal(&sd) //nolint:errcheck
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
var desc Session
|
||||
err = desc.Unmarshal(&sd)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
require.NotZero(t, len(desc.Medias))
|
||||
|
||||
desc.Marshal(false) //nolint:errcheck
|
||||
})
|
||||
}
|
||||
|
2
pkg/description/testdata/fuzz/FuzzSessionUnmarshal/5838cdfae7b16cde
vendored
Normal file
2
pkg/description/testdata/fuzz/FuzzSessionUnmarshal/5838cdfae7b16cde
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
go test fuzz v1
|
||||
string("")
|
@@ -1271,8 +1271,15 @@ func FuzzUnmarshal(f *testing.F) {
|
||||
var desc sdp.SessionDescription
|
||||
err := desc.Unmarshal([]byte(in))
|
||||
|
||||
if err == nil && len(desc.MediaDescriptions) == 1 && len(desc.MediaDescriptions[0].MediaName.Formats) == 1 {
|
||||
Unmarshal(desc.MediaDescriptions[0], desc.MediaDescriptions[0].MediaName.Formats[0]) //nolint:errcheck
|
||||
if err == nil && len(desc.MediaDescriptions) >= 1 && len(desc.MediaDescriptions[0].MediaName.Formats) >= 1 {
|
||||
f, err := Unmarshal(desc.MediaDescriptions[0], desc.MediaDescriptions[0].MediaName.Formats[0])
|
||||
if err == nil {
|
||||
f.Codec()
|
||||
f.ClockRate()
|
||||
f.PayloadType()
|
||||
f.RTPMap()
|
||||
f.FMTP()
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
Reference in New Issue
Block a user