From c34b907d58f73cecffc52487b2e65e012fc82885 Mon Sep 17 00:00:00 2001 From: shishirng Date: Wed, 9 Mar 2022 16:51:23 -0500 Subject: [PATCH] Add checks to prevent bytes/packet counts from going -ve (#499) Signed-off-by: shishir gowda --- pkg/telemetry/statsworker.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkg/telemetry/statsworker.go b/pkg/telemetry/statsworker.go index dcfad1d1e..bfb60ca36 100644 --- a/pkg/telemetry/statsworker.go +++ b/pkg/telemetry/statsworker.go @@ -350,6 +350,9 @@ func (stats *Stats) computeDeltaStats() *livekit.AnalyticsStat { deltaStats.TotalPrimaryBytes = cur.TotalPrimaryBytes - prev.TotalPrimaryBytes deltaStats.TotalPaddingBytes = cur.TotalPaddingBytes - prev.TotalPaddingBytes deltaStats.TotalRetransmitBytes = cur.TotalRetransmitBytes - prev.TotalRetransmitBytes + if int64(deltaStats.TotalPrimaryBytes) < 0 || int64(deltaStats.TotalPaddingBytes) < 0 || int64(deltaStats.TotalRetransmitBytes) < 0 { + return nil + } var videoLayer *livekit.AnalyticsVideoLayer if len(cur.VideoLayers) > 0 && len(prev.VideoLayers) > 0 { @@ -366,6 +369,9 @@ func (stats *Stats) computeDeltaStats() *livekit.AnalyticsStat { // we accumulate bytes/packets across layers videoLayer.TotalBytes = cur.TotalBytes - prev.TotalBytes videoLayer.TotalPackets = cur.TotalPackets - prev.TotalPackets + if int64(videoLayer.TotalBytes) < 0 || int32(videoLayer.TotalPackets) < 0 { + return nil + } } // if no packets from any layers, return nil to send no stats if deltaStats.TotalPackets == 0 && deltaStats.TotalPrimaryPackets == 0 && deltaStats.TotalRetransmitPackets == 0 && deltaStats.TotalPaddingPackets == 0 {