diff --git a/internal/formatprocessor/h264.go b/internal/formatprocessor/h264.go index 80cfc70a..d5da5683 100644 --- a/internal/formatprocessor/h264.go +++ b/internal/formatprocessor/h264.go @@ -13,7 +13,7 @@ import ( ) // extract SPS and PPS without decoding RTP packets -func rtpH264ExtractSPSPPS(payload []byte) ([]byte, []byte) { +func rtpH264ExtractParams(payload []byte) ([]byte, []byte) { if len(payload) < 1 { return nil, nil } @@ -112,7 +112,7 @@ func (t *formatProcessorH264) createEncoder( } func (t *formatProcessorH264) updateTrackParametersFromRTPPacket(payload []byte) { - sps, pps := rtpH264ExtractSPSPPS(payload) + sps, pps := rtpH264ExtractParams(payload) if (sps != nil && !bytes.Equal(sps, t.format.SPS)) || (pps != nil && !bytes.Equal(pps, t.format.PPS)) { diff --git a/internal/formatprocessor/h264_test.go b/internal/formatprocessor/h264_test.go index b0567cb9..bf1fdeb1 100644 --- a/internal/formatprocessor/h264_test.go +++ b/internal/formatprocessor/h264_test.go @@ -200,3 +200,9 @@ func TestH264EmptyPacket(t *testing.T) { // if all NALUs have been removed, no RTP packets must be generated. require.Equal(t, []*rtp.Packet(nil), unit.RTPPackets) } + +func FuzzRTPH264ExtractParams(f *testing.F) { + f.Fuzz(func(t *testing.T, b []byte) { + rtpH264ExtractParams(b) + }) +} diff --git a/internal/formatprocessor/h265.go b/internal/formatprocessor/h265.go index 629945a7..7258b1eb 100644 --- a/internal/formatprocessor/h265.go +++ b/internal/formatprocessor/h265.go @@ -13,7 +13,7 @@ import ( ) // extract VPS, SPS and PPS without decoding RTP packets -func rtpH265ExtractVPSSPSPPS(payload []byte) ([]byte, []byte, []byte) { +func rtpH265ExtractParams(payload []byte) ([]byte, []byte, []byte) { if len(payload) < 2 { return nil, nil, nil } @@ -119,7 +119,7 @@ func (t *formatProcessorH265) createEncoder( } func (t *formatProcessorH265) updateTrackParametersFromRTPPacket(payload []byte) { - vps, sps, pps := rtpH265ExtractVPSSPSPPS(payload) + vps, sps, pps := rtpH265ExtractParams(payload) if (vps != nil && !bytes.Equal(vps, t.format.VPS)) || (sps != nil && !bytes.Equal(sps, t.format.SPS)) || diff --git a/internal/formatprocessor/h265_test.go b/internal/formatprocessor/h265_test.go index 6e183bdc..7ad5d86c 100644 --- a/internal/formatprocessor/h265_test.go +++ b/internal/formatprocessor/h265_test.go @@ -196,3 +196,9 @@ func TestH265EmptyPacket(t *testing.T) { // if all NALUs have been removed, no RTP packets must be generated. require.Equal(t, []*rtp.Packet(nil), unit.RTPPackets) } + +func FuzzRTPH265ExtractParams(f *testing.F) { + f.Fuzz(func(t *testing.T, b []byte) { + rtpH265ExtractParams(b) + }) +} diff --git a/internal/formatprocessor/testdata/fuzz/FuzzRTPH264ExtractSPSPPS/048b606517c23baf b/internal/formatprocessor/testdata/fuzz/FuzzRTPH264ExtractSPSPPS/048b606517c23baf new file mode 100644 index 00000000..d4bdeb53 --- /dev/null +++ b/internal/formatprocessor/testdata/fuzz/FuzzRTPH264ExtractSPSPPS/048b606517c23baf @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("800") diff --git a/internal/formatprocessor/testdata/fuzz/FuzzRTPH264ExtractSPSPPS/32e7782636603e29 b/internal/formatprocessor/testdata/fuzz/FuzzRTPH264ExtractSPSPPS/32e7782636603e29 new file mode 100644 index 00000000..c487badc --- /dev/null +++ b/internal/formatprocessor/testdata/fuzz/FuzzRTPH264ExtractSPSPPS/32e7782636603e29 @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("8\x00\x00") diff --git a/internal/formatprocessor/testdata/fuzz/FuzzRTPH264ExtractSPSPPS/caf81e9797b19c76 b/internal/formatprocessor/testdata/fuzz/FuzzRTPH264ExtractSPSPPS/caf81e9797b19c76 new file mode 100644 index 00000000..67322c70 --- /dev/null +++ b/internal/formatprocessor/testdata/fuzz/FuzzRTPH264ExtractSPSPPS/caf81e9797b19c76 @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("") diff --git a/internal/formatprocessor/testdata/fuzz/FuzzRTPH264ExtractSPSPPS/f428976a5b2917c0 b/internal/formatprocessor/testdata/fuzz/FuzzRTPH264ExtractSPSPPS/f428976a5b2917c0 new file mode 100644 index 00000000..9756ef63 --- /dev/null +++ b/internal/formatprocessor/testdata/fuzz/FuzzRTPH264ExtractSPSPPS/f428976a5b2917c0 @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("80") diff --git a/internal/formatprocessor/testdata/fuzz/FuzzRTPH265ExtractParams/353ba911ad2dc191 b/internal/formatprocessor/testdata/fuzz/FuzzRTPH265ExtractParams/353ba911ad2dc191 new file mode 100644 index 00000000..955f0420 --- /dev/null +++ b/internal/formatprocessor/testdata/fuzz/FuzzRTPH265ExtractParams/353ba911ad2dc191 @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("a00") diff --git a/internal/formatprocessor/testdata/fuzz/FuzzRTPH265ExtractParams/3c3a72c00adac0b3 b/internal/formatprocessor/testdata/fuzz/FuzzRTPH265ExtractParams/3c3a72c00adac0b3 new file mode 100644 index 00000000..79752f98 --- /dev/null +++ b/internal/formatprocessor/testdata/fuzz/FuzzRTPH265ExtractParams/3c3a72c00adac0b3 @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("a0\x00\x00") diff --git a/internal/formatprocessor/testdata/fuzz/FuzzRTPH265ExtractParams/582528ddfad69eb5 b/internal/formatprocessor/testdata/fuzz/FuzzRTPH265ExtractParams/582528ddfad69eb5 new file mode 100644 index 00000000..a96f5599 --- /dev/null +++ b/internal/formatprocessor/testdata/fuzz/FuzzRTPH265ExtractParams/582528ddfad69eb5 @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("0") diff --git a/internal/formatprocessor/testdata/fuzz/FuzzRTPH265ExtractParams/c4389a565e828050 b/internal/formatprocessor/testdata/fuzz/FuzzRTPH265ExtractParams/c4389a565e828050 new file mode 100644 index 00000000..81d331a2 --- /dev/null +++ b/internal/formatprocessor/testdata/fuzz/FuzzRTPH265ExtractParams/c4389a565e828050 @@ -0,0 +1,2 @@ +go test fuzz v1 +[]byte("a000")