Merge commit '04d2f9ace3fb6e880f3488770fc5a39de5b63cbb' into release/1.1
authorMichael Niedermayer <michaelni@gmx.at>
Mon, 7 Oct 2013 23:26:51 +0000 (01:26 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Mon, 7 Oct 2013 23:26:51 +0000 (01:26 +0200)
* commit '04d2f9ace3fb6e880f3488770fc5a39de5b63cbb':
  mvi: Add sanity checking for the audio frame size
  alac: Do bounds checking of lpc_order read from the bitstream
  xwma: Avoid division by zero
  avidec: Make sure a packet is large enough before reading its data
  vqf: Make sure the bitrate is in the valid range
  vqf: Make sure sample_rate is set to a valid value
  electronicarts: Check packet sizes before reading
  lavf: Avoid setting avg_frame_rate if delta_dts is negative
  vc1dec: Undo mpegvideo initialization if unable to allocate tables
  vc1dec: Fix leaks in ff_vc1_decode_init_alloc_tables on errors
  wnv1: Make sure the input packet is large enough
  dcadec: Validate the lfe parameter

Conflicts:
libavcodec/dcadec.c
libavcodec/wnv1.c
libavformat/avidec.c
libavformat/electronicarts.c
libavformat/utils.c
libavformat/xwma.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/alac.c
libavcodec/dcadec.c
libavcodec/vc1dec.c
libavcodec/wnv1.c
libavformat/avidec.c
libavformat/electronicarts.c
libavformat/mvi.c
libavformat/utils.c
libavformat/vqf.c
libavformat/xwma.c

Simple merge
@@@ -738,10 -582,9 +738,10 @@@ static int dca_parse_frame_header(DCACo
      s->lfe               = get_bits(&s->gb, 2);
      s->predictor_history = get_bits(&s->gb, 1);
  
-     if (s->lfe == 3) {
+     if (s->lfe > 2) {
 +        s->lfe = 0;
-         av_log_ask_for_sample(s->avctx, "LFE is 3\n");
-         return AVERROR_PATCHWELCOME;
+         av_log(s->avctx, AV_LOG_ERROR, "Invalid LFE value: %d\n", s->lfe);
+         return AVERROR_INVALIDDATA;
      }
  
      /* TODO: check CRC */
Simple merge
@@@ -71,8 -71,8 +71,8 @@@ static int decode_frame(AVCodecContext 
      int prev_y = 0, prev_u = 0, prev_v = 0;
      uint8_t *rbuf;
  
-     if(buf_size<=8) {
-         av_log(avctx, AV_LOG_ERROR, "buf_size %d is too small\n", buf_size);
 -    if (buf_size < 8) {
 -        av_log(avctx, AV_LOG_ERROR, "Packet is too short\n");
++    if (buf_size <= 8) {
++        av_log(avctx, AV_LOG_ERROR, "Packet size %d is too small\n", buf_size);
          return AVERROR_INVALIDDATA;
      }
  
Simple merge
Simple merge
Simple merge
@@@ -2981,12 -2498,13 +2981,13 @@@ int avformat_find_stream_info(AVFormatC
                  int      best_fps = 0;
                  double best_error = 0.01;
  
 -                if (delta_dts     >= INT64_MAX / st->time_base.num ||
 -                    delta_packets >= INT64_MAX / st->time_base.den ||
 -                    delta_dts < 0)
 +                if (st->info->codec_info_duration        >= INT64_MAX / st->time_base.num / 2||
-                     st->info->codec_info_duration_fields >= INT64_MAX / st->time_base.den)
++                    st->info->codec_info_duration_fields >= INT64_MAX / st->time_base.den ||
++                    st->info->codec_info_duration        < 0)
                      continue;
                  av_reduce(&st->avg_frame_rate.num, &st->avg_frame_rate.den,
 -                          delta_packets*(int64_t)st->time_base.den,
 -                          delta_dts*(int64_t)st->time_base.num, 60000);
 +                          st->info->codec_info_duration_fields*(int64_t)st->time_base.den,
 +                          st->info->codec_info_duration*2*(int64_t)st->time_base.num, 60000);
  
                  /* round guessed framerate to a "standard" framerate if it's
                   * within 1% of the original estimate*/
@@@ -174,11 -174,11 +174,15 @@@ static int vqf_read_header(AVFormatCont
          st->codec->sample_rate = 11025;
          break;
      default:
+         if (rate_flag < 8 || rate_flag > 44) {
+             av_log(s, AV_LOG_ERROR, "Invalid rate flag %d\n", rate_flag);
+             return AVERROR_INVALIDDATA;
+         }
          st->codec->sample_rate = rate_flag*1000;
 +        if (st->codec->sample_rate <= 0) {
 +            av_log(s, AV_LOG_ERROR, "sample rate %d is invalid\n", st->codec->sample_rate);
 +            return -1;
 +        }
          break;
      }
  
Simple merge