diff --git a/pkg/formats/format_test.go b/pkg/formats/format_test.go index 02997e4d..2354627d 100644 --- a/pkg/formats/format_test.go +++ b/pkg/formats/format_test.go @@ -711,6 +711,59 @@ func TestUnmarshalMPEG4AudioGenericErrors(t *testing.T) { require.Error(t, err) } +func TestUnmarshalMPEG4AudioLATMErrors(t *testing.T) { + _, err := Unmarshal("audio", 96, "MP4A-LATM/48000/2", map[string]string{ + "profile-level-id": "aaa", + }) + require.Error(t, err) + + _, err = Unmarshal("audio", 96, "MP4A-LATM/48000/2", map[string]string{ + "bitrate": "aaa", + }) + require.Error(t, err) + + _, err = Unmarshal("audio", 96, "MP4A-LATM/48000/2", map[string]string{ + "object": "aaa", + }) + require.Error(t, err) + + _, err = Unmarshal("audio", 96, "MP4A-LATM/48000/2", map[string]string{ + "object": "120", + }) + require.Error(t, err) + + _, err = Unmarshal("audio", 96, "MP4A-LATM/48000/2", map[string]string{ + "cpresent": "aaa", + }) + require.Error(t, err) + + _, err = Unmarshal("audio", 96, "MP4A-LATM/48000/2", map[string]string{ + "config": "aaa", + }) + require.Error(t, err) + + _, err = Unmarshal("audio", 96, "MP4A-LATM/48000/2", map[string]string{ + "sbr-enabled": "aaa", + }) + require.Error(t, err) + + _, err = Unmarshal("audio", 96, "MP4A-LATM/48000/2", map[string]string{ + "profile-level-id": "15", + "cpresent": "0", + "config": "400026103fc0", + "sbr-enabled": "1", + }) + require.Error(t, err) + + _, err = Unmarshal("audio", 96, "MP4A-LATM/48000/2", map[string]string{ + "profile-level-id": "15", + "object": "2", + "cpresent": "0", + "sbr-enabled": "1", + }) + require.Error(t, err) +} + func FuzzUnmarshalH264(f *testing.F) { f.Fuzz(func(t *testing.T, sps string, pktMode string) { Unmarshal("video", 96, "H264/90000", map[string]string{ @@ -737,19 +790,6 @@ func FuzzUnmarshalLPCM(f *testing.F) { }) } -func FuzzUnmarshalMPEG4AudioLATM(f *testing.F) { - f.Fuzz(func(t *testing.T, a, b, c, d, e, f string) { - Unmarshal("audio", 96, "MP4A-LATM/48000/2", map[string]string{ - "profile-level-id": a, - "bitrate": b, - "object": c, - "cpresent": d, - "config": e, - "sbr-enabled": f, - }) - }) -} - func FuzzUnmarshalMPEG4VideoES(f *testing.F) { f.Fuzz(func(t *testing.T, a, b string) { Unmarshal("video", 96, "MP4V-ES/90000", map[string]string{ diff --git a/pkg/formats/mpeg4_audio_latm.go b/pkg/formats/mpeg4_audio_latm.go index f34d4434..2cfca285 100644 --- a/pkg/formats/mpeg4_audio_latm.go +++ b/pkg/formats/mpeg4_audio_latm.go @@ -6,6 +6,7 @@ import ( "strconv" "strings" + "github.com/bluenviron/mediacommon/pkg/codecs/mpeg4audio" "github.com/pion/rtp" ) @@ -17,7 +18,7 @@ type MPEG4AudioLATM struct { Channels int ProfileLevelID int Bitrate *int - Object int + Object mpeg4audio.ObjectType CPresent *bool Config []byte SBREnabled *bool @@ -84,10 +85,18 @@ func (f *MPEG4AudioLATM) unmarshal( case "object": tmp, err := strconv.ParseInt(val, 10, 64) if err != nil { - return fmt.Errorf("invalid object: %v", val) + return fmt.Errorf("invalid object type: %v", val) } - f.Object = int(tmp) + f.Object = mpeg4audio.ObjectType(int(tmp)) + + switch f.Object { + case mpeg4audio.ObjectTypeAACLC, + mpeg4audio.ObjectTypeSBR, + mpeg4audio.ObjectTypePS: + default: + return fmt.Errorf("unsupported object type: %d", f.Object) + } case "cpresent": tmp, err := strconv.ParseInt(val, 10, 64) diff --git a/pkg/formats/testdata/fuzz/FuzzUnmarshalMPEG4AudioLATM/3570da660901e702 b/pkg/formats/testdata/fuzz/FuzzUnmarshalMPEG4AudioLATM/3570da660901e702 deleted file mode 100644 index 2587b1e7..00000000 --- a/pkg/formats/testdata/fuzz/FuzzUnmarshalMPEG4AudioLATM/3570da660901e702 +++ /dev/null @@ -1,7 +0,0 @@ -go test fuzz v1 -string("%20") -string("") -string("oc\x97\xf3V\x8e\xe0") -string("") -string("\x0f\x11") -string("Z") diff --git a/pkg/formats/testdata/fuzz/FuzzUnmarshalMPEG4AudioLATM/400020fb8be5431f b/pkg/formats/testdata/fuzz/FuzzUnmarshalMPEG4AudioLATM/400020fb8be5431f deleted file mode 100644 index ef04c2ae..00000000 --- a/pkg/formats/testdata/fuzz/FuzzUnmarshalMPEG4AudioLATM/400020fb8be5431f +++ /dev/null @@ -1,7 +0,0 @@ -go test fuzz v1 -string("") -string("") -string("") -string("") -string("") -string("0") diff --git a/pkg/formats/testdata/fuzz/FuzzUnmarshalMPEG4AudioLATM/b95227f0e71f8fa1 b/pkg/formats/testdata/fuzz/FuzzUnmarshalMPEG4AudioLATM/b95227f0e71f8fa1 deleted file mode 100644 index 321e624d..00000000 --- a/pkg/formats/testdata/fuzz/FuzzUnmarshalMPEG4AudioLATM/b95227f0e71f8fa1 +++ /dev/null @@ -1,7 +0,0 @@ -go test fuzz v1 -string("") -string("") -string("oc\x97\xf3V\x8e\xe0") -string("") -string("9A") -string("X") diff --git a/pkg/formats/testdata/fuzz/FuzzUnmarshalMPEG4AudioLATM/c440c66d0e8a2f04 b/pkg/formats/testdata/fuzz/FuzzUnmarshalMPEG4AudioLATM/c440c66d0e8a2f04 deleted file mode 100644 index e61f676a..00000000 --- a/pkg/formats/testdata/fuzz/FuzzUnmarshalMPEG4AudioLATM/c440c66d0e8a2f04 +++ /dev/null @@ -1,7 +0,0 @@ -go test fuzz v1 -string("") -string("") -string("oc\x97\xf3V\x8e\xe0") -string("") -string("\x0f\x11") -string("0")