| 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 e28dc27c22d43a5c491f147f109a2a096f57015d..2898c26590bfaa4473bb74650c30a3ac99739e8a 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"
 | 
| @@ -126,7 +126,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 +166,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,
 | 
| @@ -210,7 +209,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 =
 | 
| @@ -218,12 +217,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;
 | 
|  
 | 
| @@ -277,14 +277,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.";
 | 
|    }
 | 
|  }
 | 
|  
 | 
| @@ -305,6 +302,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) {
 | 
| @@ -410,7 +410,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;
 | 
|  
 | 
| @@ -435,8 +435,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);
 | 
|    }
 | 
|  }
 | 
|  
 | 
| 
 |