Merge remote-tracking branch 'qatar/master'
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 2 Oct 2011 23:02:45 +0000 (01:02 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 2 Oct 2011 23:02:45 +0000 (01:02 +0200)
* qatar/master:
  mpc8: check output buffer size before decoding
  mpc7: return error if packet is too small.
  mpc7: check output buffer size before decoding
  nellymoserdec: allocate float_buf only when decoding to int16
  nellymoserdec: use NELLY_BUF_LEN instead of 128
  nellymoserdec: use NELLY_BLOCK_LEN instead of 64 when appropriate.
  nellymoserdec: allow user to request SAMPLE_FMT_FLT for output samples.
  nellymoser: check output buffer size before decoding
  win32: improve threading algorithm warning

Conflicts:
libavcodec/nellymoserdec.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/mpc7.c
libavcodec/mpc8.c
libavcodec/nellymoserdec.c
libavcodec/w32thread.c

Simple merge
Simple merge
@@@ -156,20 -166,26 +166,26 @@@ static int decode_tag(AVCodecContext * 
      const uint8_t *buf = avpkt->data;
      int buf_size = avpkt->size;
      NellyMoserDecodeContext *s = avctx->priv_data;
-     int blocks, i;
-     int16_t* samples;
 +    int data_max = *data_size;
-     samples = (int16_t*)data;
+     int blocks, i, block_size;
+     int16_t *samples_s16 = data;
+     float   *samples_flt = data;
 +    *data_size = 0;
  
-     if (buf_size < avctx->block_align)
+     if (buf_size < avctx->block_align) {
 -        *data_size = 0;
          return buf_size;
+     }
  
-     if (buf_size % 64) {
+     if (buf_size % NELLY_BLOCK_LEN) {
          av_log(avctx, AV_LOG_ERROR, "Tag size %d.\n", buf_size);
 -        *data_size = 0;
          return buf_size;
      }
-     blocks = buf_size / 64;
+     block_size = NELLY_SAMPLES * av_get_bytes_per_sample(avctx->sample_fmt);
 -    blocks     = FFMIN(buf_size / NELLY_BLOCK_LEN, *data_size / block_size);
++    blocks     = FFMIN(buf_size / NELLY_BLOCK_LEN, data_max / block_size);
+     if (blocks <= 0) {
+         av_log(avctx, AV_LOG_ERROR, "Output buffer is too small\n");
+         return AVERROR(EINVAL);
+     }
      /* Normal numbers of blocks for sample rates:
       *  8000 Hz - 1
       * 11025 Hz - 2
Simple merge