Merge commit 'd7d6efe42b0d2057e67999b96b9a391f533d2333'
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 7 Dec 2012 14:45:25 +0000 (15:45 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 7 Dec 2012 14:52:43 +0000 (15:52 +0100)
* commit 'd7d6efe42b0d2057e67999b96b9a391f533d2333':
  h264: check sps.log2_max_frame_num for validity
  mov: validate number of DataReferenceBox entries against box size
  mov: compute avg_frame_rate only if duration is known
  flac: change minimum and default of lpc_passes option to 1

Conflicts:
libavcodec/h264_ps.c
libavformat/mov.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/flacenc.c
libavcodec/h264_ps.c
libavformat/mov.c

@@@ -1320,7 -1299,7 +1320,7 @@@ static const AVOption options[] = 
  { "fixed",    NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LPC_TYPE_FIXED },    INT_MIN, INT_MAX, FLAGS, "lpc_type" },
  { "levinson", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LPC_TYPE_LEVINSON }, INT_MIN, INT_MAX, FLAGS, "lpc_type" },
  { "cholesky", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LPC_TYPE_CHOLESKY }, INT_MIN, INT_MAX, FLAGS, "lpc_type" },
- { "lpc_passes", "Number of passes to use for Cholesky factorization during LPC analysis", offsetof(FlacEncodeContext, options.lpc_passes),  AV_OPT_TYPE_INT, {.i64 = -1 }, INT_MIN, INT_MAX, FLAGS },
 -{ "lpc_passes", "Number of passes to use for Cholesky factorization during LPC analysis", offsetof(FlacEncodeContext, options.lpc_passes),  AV_OPT_TYPE_INT, {.i64 = 1 }, 1, INT_MAX, FLAGS },
++{ "lpc_passes", "Number of passes to use for Cholesky factorization during LPC analysis", offsetof(FlacEncodeContext, options.lpc_passes),  AV_OPT_TYPE_INT, {.i64 = 2 }, 1, INT_MAX, FLAGS },
  { "min_partition_order",  NULL, offsetof(FlacEncodeContext, options.min_partition_order),  AV_OPT_TYPE_INT, {.i64 = -1 },      -1, MAX_PARTITION_ORDER, FLAGS },
  { "max_partition_order",  NULL, offsetof(FlacEncodeContext, options.max_partition_order),  AV_OPT_TYPE_INT, {.i64 = -1 },      -1, MAX_PARTITION_ORDER, FLAGS },
  { "prediction_order_method", "Search method for selecting prediction order", offsetof(FlacEncodeContext, options.prediction_order_method), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, ORDER_METHOD_LOG, FLAGS, "predm" },
@@@ -394,12 -351,15 +397,15 @@@ int ff_h264_decode_seq_parameter_set(H2
          sps->bit_depth_chroma = 8;
      }
  
-     sps->log2_max_frame_num= get_ue_golomb(&s->gb) + 4;
-     if (sps->log2_max_frame_num < 4 || sps->log2_max_frame_num > 16) {
-         av_log(h->s.avctx, AV_LOG_ERROR, "illegal log2_max_frame_num %d\n",
-                sps->log2_max_frame_num);
+     log2_max_frame_num_minus4 = get_ue_golomb(&s->gb);
+     if (log2_max_frame_num_minus4 < MIN_LOG2_MAX_FRAME_NUM - 4 ||
+         log2_max_frame_num_minus4 > MAX_LOG2_MAX_FRAME_NUM - 4) {
+         av_log(h->s.avctx, AV_LOG_ERROR,
+                "log2_max_frame_num_minus4 out of range (0-12): %d\n",
+                log2_max_frame_num_minus4);
 -        return AVERROR_INVALIDDATA;
 +        goto fail;
      }
+     sps->log2_max_frame_num = log2_max_frame_num_minus4 + 4;
  
      sps->poc_type= get_ue_golomb_31(&s->gb);
  
@@@ -442,10 -365,10 +443,11 @@@ static int mov_read_dref(MOVContext *c
  
      avio_rb32(pb); // version + flags
      entries = avio_rb32(pb);
-     if (entries >= UINT_MAX / sizeof(*sc->drefs))
+     if (entries >  (atom.size - 1) / MIN_DATA_ENTRY_BOX_SIZE + 1 ||
+         entries >= UINT_MAX / sizeof(*sc->drefs))
          return AVERROR_INVALIDDATA;
      av_free(sc->drefs);
 +    sc->drefs_count = 0;
      sc->drefs = av_mallocz(entries * sizeof(*sc->drefs));
      if (!sc->drefs)
          return AVERROR(ENOMEM);
@@@ -2220,9 -2054,9 +2222,9 @@@ static int mov_read_trak(MOVContext *c
                                               ((double)st->codec->width * sc->height), INT_MAX);
          }
  
 -        if (st->duration != AV_NOPTS_VALUE)
 +        if (st->duration > 0)
              av_reduce(&st->avg_frame_rate.num, &st->avg_frame_rate.den,
-                     sc->time_scale*st->nb_frames, st->duration, INT_MAX);
+                       sc->time_scale*st->nb_frames, st->duration, INT_MAX);
  
  #if FF_API_R_FRAME_RATE
          if (sc->stts_count == 1 || (sc->stts_count == 2 && sc->stts_data[1].count == 1))