| Index: webrtc/modules/rtp_rtcp/source/forward_error_correction.cc | 
| diff --git a/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc b/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc | 
| index 66c2f03acab9658890ef531c7fa464caacb080f5..4de8fb3a46550a0f1af89735bcd422e20acb1e29 100644 | 
| --- a/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc | 
| +++ b/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc | 
| @@ -10,13 +10,13 @@ | 
|  | 
| #include "webrtc/modules/rtp_rtcp/source/forward_error_correction.h" | 
|  | 
| -#include <assert.h> | 
| #include <stdlib.h> | 
| #include <string.h> | 
|  | 
| #include <algorithm> | 
| #include <iterator> | 
|  | 
| +#include "webrtc/base/checks.h" | 
| #include "webrtc/base/logging.h" | 
| #include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h" | 
| #include "webrtc/modules/rtp_rtcp/source/byte_io.h" | 
| @@ -112,7 +112,6 @@ int32_t ForwardErrorCorrection::GenerateFEC(const PacketList& media_packet_list, | 
| FecMaskType fec_mask_type, | 
| PacketList* fec_packet_list) { | 
| const uint16_t num_media_packets = media_packet_list.size(); | 
| - | 
| // Sanity check arguments. | 
| assert(num_media_packets > 0); | 
| assert(num_important_packets >= 0 && | 
| @@ -126,7 +125,7 @@ int32_t ForwardErrorCorrection::GenerateFEC(const PacketList& media_packet_list, | 
| } | 
|  | 
| bool l_bit = (num_media_packets > 8 * kMaskSizeLBitClear); | 
| -  int num_maskBytes = l_bit ? kMaskSizeLBitSet : kMaskSizeLBitClear; | 
| +  int num_mask_bytes = l_bit ? kMaskSizeLBitSet : kMaskSizeLBitClear; | 
|  | 
| // Do some error checking on the media packets. | 
| for (Packet* media_packet : media_packet_list) { | 
| @@ -166,21 +165,20 @@ int32_t ForwardErrorCorrection::GenerateFEC(const PacketList& media_packet_list, | 
| // Always allocate space for a large mask. | 
| rtc::scoped_ptr<uint8_t[]> packet_mask( | 
| new uint8_t[num_fec_packets * kMaskSizeLBitSet]); | 
| -  memset(packet_mask.get(), 0, num_fec_packets * num_maskBytes); | 
| +  memset(packet_mask.get(), 0, num_fec_packets * num_mask_bytes); | 
| internal::GeneratePacketMasks(num_media_packets, num_fec_packets, | 
| num_important_packets, use_unequal_protection, | 
| mask_table, packet_mask.get()); | 
|  | 
| int num_mask_bits = InsertZerosInBitMasks( | 
| -      media_packet_list, packet_mask.get(), num_maskBytes, num_fec_packets); | 
| - | 
| -  l_bit = (num_mask_bits > 8 * kMaskSizeLBitClear); | 
| +      media_packet_list, packet_mask.get(), num_mask_bytes, num_fec_packets); | 
|  | 
| if (num_mask_bits < 0) { | 
| return -1; | 
| } | 
| +  l_bit = (num_mask_bits > 8 * kMaskSizeLBitClear); | 
| if (l_bit) { | 
| -    num_maskBytes = kMaskSizeLBitSet; | 
| +    num_mask_bytes = kMaskSizeLBitSet; | 
| } | 
|  | 
| GenerateFecBitStrings(media_packet_list, packet_mask.get(), num_fec_packets, | 
| @@ -212,7 +210,7 @@ void ForwardErrorCorrection::GenerateFecBitStrings( | 
| return; | 
| } | 
| uint8_t media_payload_length[2]; | 
| -  const int num_maskBytes = l_bit ? kMaskSizeLBitSet : kMaskSizeLBitClear; | 
| +  const int num_mask_bytes = l_bit ? kMaskSizeLBitSet : kMaskSizeLBitClear; | 
| const uint16_t ulp_header_size = | 
| l_bit ? kUlpHeaderSizeLBitSet : kUlpHeaderSizeLBitClear; | 
| const uint16_t fec_rtp_offset = | 
| @@ -220,12 +218,13 @@ void ForwardErrorCorrection::GenerateFecBitStrings( | 
|  | 
| for (int i = 0; i < num_fec_packets; ++i) { | 
| PacketList::const_iterator media_list_it = media_packet_list.begin(); | 
| -    uint32_t pkt_mask_idx = i * num_maskBytes; | 
| +    uint32_t pkt_mask_idx = i * num_mask_bytes; | 
| uint32_t media_pkt_idx = 0; | 
| uint16_t fec_packet_length = 0; | 
| uint16_t prev_seq_num = ParseSequenceNumber((*media_list_it)->data); | 
| while (media_list_it != media_packet_list.end()) { | 
| -      // Each FEC packet has a multiple byte mask. | 
| +      // Each FEC packet has a multiple byte mask. Determine if this media | 
| +      // packet should be included in FEC packet i. | 
| if (packet_mask[pkt_mask_idx] & (1 << (7 - media_pkt_idx))) { | 
| Packet* media_packet = *media_list_it; | 
|  | 
| @@ -279,15 +278,11 @@ void ForwardErrorCorrection::GenerateFecBitStrings( | 
| media_pkt_idx += static_cast<uint16_t>(seq_num - prev_seq_num); | 
| prev_seq_num = seq_num; | 
| } | 
| -      if (media_pkt_idx == 8) { | 
| -        // Switch to the next mask byte. | 
| -        media_pkt_idx = 0; | 
| -        pkt_mask_idx++; | 
| -      } | 
| +      pkt_mask_idx += media_pkt_idx / 8; | 
| +      media_pkt_idx %= 8; | 
| } | 
| -    assert(generated_fec_packets_[i].length); | 
| -    // Note: This shouldn't happen: means packet mask is wrong or poorly | 
| -    // designed | 
| +    RTC_DCHECK_GT(generated_fec_packets_[i].length, 0u) | 
| +        << "Packet mask is wrong or poorly designed."; | 
| } | 
| } | 
|  | 
| @@ -310,6 +305,9 @@ int ForwardErrorCorrection::InsertZerosInBitMasks( | 
| // required. | 
| return media_packets.size(); | 
| } | 
| +  // We can only protect 8 * kMaskSizeLBitSet packets. | 
| +  if (total_missing_seq_nums + media_packets.size() > 8 * kMaskSizeLBitSet) | 
| +    return -1; | 
| // Allocate the new mask. | 
| int new_mask_bytes = kMaskSizeLBitClear; | 
| if (media_packets.size() + total_missing_seq_nums > 8 * kMaskSizeLBitClear) { | 
| @@ -421,7 +419,7 @@ void ForwardErrorCorrection::GenerateFecUlpHeaders( | 
| PacketList::const_iterator media_list_it = media_packet_list.begin(); | 
| Packet* media_packet = *media_list_it; | 
| assert(media_packet != NULL); | 
| -  int num_maskBytes = l_bit ? kMaskSizeLBitSet : kMaskSizeLBitClear; | 
| +  int num_mask_bytes = l_bit ? kMaskSizeLBitSet : kMaskSizeLBitClear; | 
| const uint16_t ulp_header_size = | 
| l_bit ? kUlpHeaderSizeLBitSet : kUlpHeaderSizeLBitClear; | 
|  | 
| @@ -446,8 +444,8 @@ void ForwardErrorCorrection::GenerateFecUlpHeaders( | 
| generated_fec_packets_[i].length - kFecHeaderSize - ulp_header_size); | 
|  | 
| // Copy the packet mask. | 
| -    memcpy(&generated_fec_packets_[i].data[12], &packet_mask[i * num_maskBytes], | 
| -           num_maskBytes); | 
| +    memcpy(&generated_fec_packets_[i].data[12], | 
| +           &packet_mask[i * num_mask_bytes], num_mask_bytes); | 
| } | 
| } | 
|  | 
|  |