From cc450b92a0006129e9006251a1f92abb0d7ad6dc Mon Sep 17 00:00:00 2001 From: Alessandro Ros Date: Sat, 2 Sep 2023 20:45:30 +0200 Subject: [PATCH] rtptime: fix crash in case of packets from tracks with invalid clock rate (#400) --- pkg/rtptime/global_decoder.go | 4 ++++ pkg/rtptime/global_decoder_test.go | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/pkg/rtptime/global_decoder.go b/pkg/rtptime/global_decoder.go index 61f32e71..ba449a37 100644 --- a/pkg/rtptime/global_decoder.go +++ b/pkg/rtptime/global_decoder.go @@ -71,6 +71,10 @@ func (d *GlobalDecoder) Decode( track GlobalDecoderTrack, pkt *rtp.Packet, ) (time.Duration, bool) { + if track.ClockRate() == 0 { + return 0, false + } + d.mutex.Lock() defer d.mutex.Unlock() diff --git a/pkg/rtptime/global_decoder_test.go b/pkg/rtptime/global_decoder_test.go index 2129789e..fdc782b2 100644 --- a/pkg/rtptime/global_decoder_test.go +++ b/pkg/rtptime/global_decoder_test.go @@ -138,3 +138,12 @@ func TestGlobalDecoder(t *testing.T) { require.Equal(t, true, ok) require.Equal(t, 6*time.Second, pts) } + +func TestGlobalDecoderInvalidClockRate(t *testing.T) { + g := NewGlobalDecoder() + + tr := &dummyTrack{clockRate: 0, ptsEqualsDTS: true} + + _, ok := g.Decode(tr, &rtp.Packet{Header: rtp.Header{Timestamp: 90000}}) + require.Equal(t, false, ok) +}