Merge commit '65830277d2d2ee3658e1f070a61044fff261ed3e' into release/1.1
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 12 Jan 2014 15:51:26 +0000 (16:51 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 12 Jan 2014 15:51:26 +0000 (16:51 +0100)
* commit '65830277d2d2ee3658e1f070a61044fff261ed3e':
  prores: Add a codepath for decoding errors
  nut: Fix unchecked allocations
  avi: directly resync on DV in AVI read failure
  mov: Don't allocate arrays with av_malloc that will be realloced
  shorten: Extend fixed_coeffs to properly support pred_order 0
  Prepare for 9.11 RELEASE
  avi: properly fail if the dv demuxer is missing
  prores: Reject negative run and level values
  audio_mix: fix channel order in mix_1_to_2_fltp_flt_c
  indeo4: Check the inherited quant_mat

Conflicts:
RELEASE
libavcodec/indeo4.c
libavcodec/shorten.c
libavformat/nut.c
libavformat/nutdec.c
libavformat/nutenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/indeo4.c
libavcodec/proresdec_lgpl.c
libavcodec/shorten.c
libavformat/avidec.c
libavformat/mov.c
libavformat/nut.c
libavformat/nut.h
libavformat/nutdec.c
libavformat/nutenc.c

@@@ -399,16 -391,11 +399,20 @@@ static int decode_band_hdr(IVI45DecCont
                         "inherited\n");
                  return AVERROR_INVALIDDATA;
              }
+             if (band->quant_mat < 0) {
+                 av_log(avctx, AV_LOG_ERROR, "Invalid quant_mat inherited\n");
+                 return AVERROR_INVALIDDATA;
+             }
          }
 +        if (quant_index_to_tab[band->quant_mat] > 4 && band->blk_size == 4) {
 +            av_log(avctx, AV_LOG_ERROR, "Invalid quant matrix for 4x4 block encountered!\n");
 +            band->quant_mat = 0;
 +            return AVERROR_INVALIDDATA;
 +        }
 +        if (band->scan_size != band->blk_size) {
 +            av_log(avctx, AV_LOG_ERROR, "mismatching scan table!\n");
 +            return AVERROR_INVALIDDATA;
 +        }
  
          /* decode block huffman codebook */
          if (ff_ivi_dec_huff_desc(&ctx->gb, get_bits1(&ctx->gb), IVI_BLK_HUFF,
Simple merge
@@@ -273,7 -265,20 +273,8 @@@ static int decode_wave_header(AVCodecCo
      return 0;
  }
  
- static const int fixed_coeffs[3][3] = {
 -static void output_buffer(int16_t **samples, int nchan, int blocksize,
 -                          int32_t **buffer)
 -{
 -    int i, ch;
 -    for (ch = 0; ch < nchan; ch++) {
 -        int32_t *in  = buffer[ch];
 -        int16_t *out = samples[ch];
 -        for (i = 0; i < blocksize; i++)
 -            out[i] = av_clip_int16(in[i]);
 -    }
 -}
 -
+ static const int fixed_coeffs[][3] = {
+     { 0,  0,  0 },
      { 1,  0,  0 },
      { 2, -1,  0 },
      { 3, -3,  1 }
@@@ -302,7 -307,12 +303,12 @@@ static int decode_subframe_lpc(ShortenC
      } else {
          /* fixed LPC coeffs */
          pred_order = command;
-         coeffs     = fixed_coeffs[pred_order - 1];
 -        if (pred_order > FF_ARRAY_ELEMS(fixed_coeffs)) {
++        if (pred_order >= FF_ARRAY_ELEMS(fixed_coeffs)) {
+             av_log(s->avctx, AV_LOG_ERROR, "invalid pred_order %d\n",
+                    pred_order);
+             return AVERROR_INVALIDDATA;
+         }
+         coeffs     = fixed_coeffs[pred_order];
          qshift     = 0;
      }
  
Simple merge
Simple merge
@@@ -214,8 -183,12 +214,14 @@@ int ff_nut_add_sp(NUTContext *nut, int6
      Syncpoint *sp= av_mallocz(sizeof(Syncpoint));
      struct AVTreeNode *node = av_tree_node_alloc();
  
+     if (!sp || !node) {
+         av_freep(&sp);
+         av_freep(&node);
+         return AVERROR(ENOMEM);
+     }
 +    nut->sp_count++;
 +
      sp->pos= pos;
      sp->back_ptr= back_ptr;
      sp->ts= ts;
Simple merge
@@@ -544,8 -525,8 +544,9 @@@ static int decode_syncpoint(NUTContext 
  {
      AVFormatContext *s = nut->avf;
      AVIOContext *bc    = s->pb;
 -    int64_t end, tmp;
 +    int64_t end;
 +    uint64_t tmp;
+     int ret;
  
      nut->last_syncpoint_pos = avio_tell(bc) - 8;
  
          return -1;
      }
  
 -    *ts = tmp / s->nb_streams *
 -          av_q2d(nut->time_base[tmp % s->nb_streams]) * AV_TIME_BASE;
 +    *ts = tmp / nut->time_base_count *
 +          av_q2d(nut->time_base[tmp % nut->time_base_count]) * AV_TIME_BASE;
-     ff_nut_add_sp(nut, nut->last_syncpoint_pos, *back_ptr, *ts);
+     if ((ret = ff_nut_add_sp(nut, nut->last_syncpoint_pos, *back_ptr, *ts)) < 0)
+         return ret;
  
      return 0;
  }
@@@ -865,20 -815,10 +865,21 @@@ static int nut_write_packet(AVFormatCon
          ff_put_v(dyn_bc, sp ? (nut->last_syncpoint_pos - sp->pos) >> 4 : 0);
          put_packet(nut, bc, dyn_bc, 1, SYNCPOINT_STARTCODE);
  
-         ff_nut_add_sp(nut, nut->last_syncpoint_pos, 0 /*unused*/, pkt->dts);
+         if ((ret = ff_nut_add_sp(nut, nut->last_syncpoint_pos, 0 /*unused*/, pkt->dts)) < 0)
+             return ret;
 +
 +        if ((1ll<<60) % nut->sp_count == 0)
 +            for (i=0; i<s->nb_streams; i++) {
 +                int j;
 +                StreamContext *nus = &nut->stream[i];
 +                nus->keyframe_pts = av_realloc(nus->keyframe_pts, 2*nut->sp_count*sizeof(*nus->keyframe_pts));
 +                if (!nus->keyframe_pts)
 +                    return AVERROR(ENOMEM);
 +                for (j=nut->sp_count == 1 ? 0 : nut->sp_count; j<2*nut->sp_count; j++)
 +                    nus->keyframe_pts[j] = AV_NOPTS_VALUE;
 +        }
      }
 -    assert(nus->last_pts != AV_NOPTS_VALUE);
 +    av_assert0(nus->last_pts != AV_NOPTS_VALUE);
  
      coded_pts = pkt->pts & ((1 << nus->msb_pts_shift) - 1);
      if (ff_lsb2full(nus, coded_pts) != pkt->pts)