Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(274)

Unified Diff: webrtc/modules/rtp_rtcp/source/tmmbr_help.cc

Issue 1727273003: Fix division by zero in FindTMMBRBoundingSet (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/rtp_rtcp/source/tmmbr_help.cc
diff --git a/webrtc/modules/rtp_rtcp/source/tmmbr_help.cc b/webrtc/modules/rtp_rtcp/source/tmmbr_help.cc
index 5c090504ca07fe5b4f9f0bb4838f3ef55238a7f3..1001bf4c5ea7ec11aef6640cfa1c3ee74c8ac49f 100644
--- a/webrtc/modules/rtp_rtcp/source/tmmbr_help.cc
+++ b/webrtc/modules/rtp_rtcp/source/tmmbr_help.cc
@@ -15,6 +15,7 @@
#include <limits>
+#include "webrtc/base/checks.h"
#include "webrtc/modules/rtp_rtcp/source/rtp_rtcp_config.h"
namespace webrtc {
@@ -300,6 +301,7 @@ TMMBRHelp::FindTMMBRBoundingSet(int32_t numCandidates, TMMBRSet& candidateSet)
&& j != currentMinIndexTMMBR)
{
candidateSet.ClearEntry(j);
+ numCandidates--;
}
}
}
@@ -336,9 +338,15 @@ TMMBRHelp::FindTMMBRBoundingSet(int32_t numCandidates, TMMBRSet& candidateSet)
// set intersection value
_ptrIntersectionBoundingSet[numBoundingSet] = 0;
// calculate its maximum packet rate (where its line crosses x-axis)
- _ptrMaxPRBoundingSet[numBoundingSet]
- = _boundingSet.Tmmbr(numBoundingSet) * 1000
- / float(8 * _boundingSet.PacketOH(numBoundingSet));
+ uint32_t packet_overhead_bits = 8 * _boundingSet.PacketOH(numBoundingSet);
+ if (packet_overhead_bits == 0) {
+ // Avoid division by zero.
+ _ptrMaxPRBoundingSet[numBoundingSet] = std::numeric_limits<float>::max();
+ } else {
+ _ptrMaxPRBoundingSet[numBoundingSet] =
+ _boundingSet.Tmmbr(numBoundingSet) * 1000 /
+ static_cast<float>(packet_overhead_bits);
+ }
numBoundingSet++;
// remove from candidate list
candidateSet.ClearEntry(minIndexTMMBR);
@@ -364,10 +372,10 @@ TMMBRHelp::FindTMMBRBoundingSet(int32_t numCandidates, TMMBRSet& candidateSet)
}
bool getNewCandidate = true;
- int curCandidateTMMBR = 0;
- int curCandidateIndex = 0;
- int curCandidatePacketOH = 0;
- int curCandidateSSRC = 0;
+ uint32_t curCandidateTMMBR = 0;
+ size_t curCandidateIndex = 0;
+ uint32_t curCandidatePacketOH = 0;
+ uint32_t curCandidateSSRC = 0;
do
{
if (getNewCandidate)
@@ -389,6 +397,8 @@ TMMBRHelp::FindTMMBRBoundingSet(int32_t numCandidates, TMMBRSet& candidateSet)
// 6. Calculate packet rate and intersection of the current
// line with line of last tuple in selected list
+ RTC_DCHECK_NE(curCandidatePacketOH,
+ _boundingSet.PacketOH(numBoundingSet - 1));
float packetRate
= float(curCandidateTMMBR
- _boundingSet.Tmmbr(numBoundingSet-1))*1000
@@ -418,9 +428,12 @@ TMMBRHelp::FindTMMBRBoundingSet(int32_t numCandidates, TMMBRSet& candidateSet)
curCandidatePacketOH,
curCandidateSSRC);
_ptrIntersectionBoundingSet[numBoundingSet] = packetRate;
- _ptrMaxPRBoundingSet[numBoundingSet]
- = _boundingSet.Tmmbr(numBoundingSet)*1000
- / float(8*_boundingSet.PacketOH(numBoundingSet));
+ float packet_overhead_bits =
+ 8 * _boundingSet.PacketOH(numBoundingSet);
+ RTC_DCHECK_NE(packet_overhead_bits, 0.0f);
+ _ptrMaxPRBoundingSet[numBoundingSet] =
+ _boundingSet.Tmmbr(numBoundingSet) * 1000 /
+ packet_overhead_bits;
numBoundingSet++;
}
numCandidates--;
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698