From a7a227709a482f05af8c4411e0992be85204a84d Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Thu, 2 Nov 2023 12:33:02 +0530 Subject: [PATCH] Prevent out-of-bounds access. (#2216) * Prevent out-of-bounds access. Don't know which codec causes a spatial layer three access. Returning nil and also logging so that we know the trackID of offending track. * spelling --- pkg/sfu/streamtrackermanager.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/sfu/streamtrackermanager.go b/pkg/sfu/streamtrackermanager.go index 0aba20ff9..c9a22bff9 100644 --- a/pkg/sfu/streamtrackermanager.go +++ b/pkg/sfu/streamtrackermanager.go @@ -214,9 +214,9 @@ func (s *StreamTrackerManager) AddTracker(layer int32) streamtracker.StreamTrack }) } - s.logger.Debugw("StreamTrackerManager add track", "layer", layer) + s.logger.Debugw("stream tracker add track", "layer", layer) tracker.OnStatusChanged(func(status streamtracker.StreamStatus) { - s.logger.Debugw("StreamTrackerManager OnStatusChanged", "layer", layer, "status", status) + s.logger.Debugw("stream tracker status changed", "layer", layer, "status", status) if status == streamtracker.StreamStatusStopped { s.removeAvailableLayer(layer) } else { @@ -289,6 +289,10 @@ func (s *StreamTrackerManager) GetTracker(layer int32) streamtracker.StreamTrack s.lock.RLock() defer s.lock.RUnlock() + if int(layer) >= len(s.trackers) { + s.logger.Errorw("unexpected layer", nil, "layer", layer) + return nil + } return s.trackers[layer] }