aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorSebastian Jansson <srte@webrtc.org>2020-06-11 14:01:16 +0200
committerCommit Bot <commit-bot@chromium.org>2020-06-11 13:56:11 +0000
commitac937d03b0de60f38fd4b6fad4b5c175a111303e (patch)
treee93c6d8ebaa1fc89ff5e416b36058deef5825574 /test
parent2899b3bc3da018822ff34196b706d69c808fdb93 (diff)
downloadwebrtc-ac937d03b0de60f38fd4b6fad4b5c175a111303e.tar.gz
Fix for potential infinite loop in TCP traffic simulator.
For stream sizes that were not multiple of 4, we could end up causing a size_t wraparound which resulted in an infinite loop. Bug: webrtc:9510 Change-Id: Ie3fe5345e1477efa6a4ec338bd9f9b00225e688e Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/177005 Reviewed-by: Per Kjellander <perkj@webrtc.org> Commit-Queue: Sebastian Jansson <srte@webrtc.org> Cr-Commit-Position: refs/heads/master@{#31503}
Diffstat (limited to 'test')
-rw-r--r--test/network/cross_traffic.cc13
1 files changed, 7 insertions, 6 deletions
diff --git a/test/network/cross_traffic.cc b/test/network/cross_traffic.cc
index be0c3d3286..56e7635142 100644
--- a/test/network/cross_traffic.cc
+++ b/test/network/cross_traffic.cc
@@ -144,15 +144,16 @@ void TcpMessageRouteImpl::SendMessage(size_t size,
cwnd_ = 10;
ssthresh_ = INFINITY;
}
- size_t data_left = size;
- size_t kMaxPacketSize = 1200;
- size_t kMinPacketSize = 4;
+ int64_t data_left = static_cast<int64_t>(size);
+ int64_t kMaxPacketSize = 1200;
+ int64_t kMinPacketSize = 4;
Message message{std::move(handler)};
while (data_left > 0) {
- size_t packet_size =
- std::max(kMinPacketSize, std::min(data_left, kMaxPacketSize));
+ int64_t packet_size = std::min(data_left, kMaxPacketSize);
int fragment_id = next_fragment_id_++;
- pending_.push_back(MessageFragment{fragment_id, packet_size});
+ pending_.push_back(MessageFragment{
+ fragment_id,
+ static_cast<size_t>(std::max(kMinPacketSize, packet_size))});
message.pending_fragment_ids.insert(fragment_id);
data_left -= packet_size;
}