From 11f6a65fe2ea62a4d5d0e08ded3b4917b2ee8fea Mon Sep 17 00:00:00 2001 From: Juliusz Chroboczek Date: Sun, 20 Jun 2021 19:52:21 +0200 Subject: [PATCH] Avoid crash in samplebuilder.PopWithTimestamp If sample is null, PopWithTimestamp will crash with SIGSEGV. --- pkg/media/samplebuilder/samplebuilder.go | 3 +++ pkg/media/samplebuilder/samplebuilder_test.go | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/pkg/media/samplebuilder/samplebuilder.go b/pkg/media/samplebuilder/samplebuilder.go index 69f059f7..ac330396 100644 --- a/pkg/media/samplebuilder/samplebuilder.go +++ b/pkg/media/samplebuilder/samplebuilder.go @@ -300,6 +300,9 @@ func (s *SampleBuilder) Pop() *media.Sample { // no sample is compiled). func (s *SampleBuilder) PopWithTimestamp() (*media.Sample, uint32) { sample := s.Pop() + if sample == nil { + return nil, 0 + } return sample, sample.PacketTimestamp } diff --git a/pkg/media/samplebuilder/samplebuilder_test.go b/pkg/media/samplebuilder/samplebuilder_test.go index ea2498d1..a5a918a5 100644 --- a/pkg/media/samplebuilder/samplebuilder_test.go +++ b/pkg/media/samplebuilder/samplebuilder_test.go @@ -379,3 +379,12 @@ func TestSampleBuilderWithPacketReleaseHandler(t *testing.T) { t.Errorf("Unexpected packet released by samples built") } } + +func TestPopWithTimestamp(t *testing.T) { + t.Run("Crash on nil", func(t *testing.T) { + s := New(0, &fakeDepacketizer{}, 1) + sample, timestamp := s.PopWithTimestamp() + assert.Nil(t, sample) + assert.Equal(t, uint32(0), timestamp) + }) +}