]> git.sesse.net Git - ffmpeg/commitdiff
Merge commit '701966730ce10290fd49c5ccedd73f505680f764'
authorMichael Niedermayer <michaelni@gmx.at>
Thu, 30 May 2013 08:23:50 +0000 (10:23 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 30 May 2013 08:36:52 +0000 (10:36 +0200)
* commit '701966730ce10290fd49c5ccedd73f505680f764':
  vmd: drop incomplete chunks and spurious samples

Conflicts:
libavcodec/vmdav.c

2 of the changes are replaced by assert0s, as they should
be impossible.
The actual bug is likely caused by a invalid block_align
which is checked for and thus impossible in ffmpeg.

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavcodec/vmdav.c

index ac2180cf0512e57e2709d501ae38cd3853892380,3a0cbf9424fede3b849f854abd61f36eee723fa4..40c1fd27e8671b0aca0608c6d398654af58d62b8
@@@ -43,6 -43,6 +43,7 @@@
  #include <stdlib.h>
  #include <string.h>
  
++#include "libavutil/avassert.h"
  #include "libavutil/channel_layout.h"
  #include "libavutil/common.h"
  #include "libavutil/intreadwrite.h"
@@@ -598,7 -601,8 +602,9 @@@ static int vmdaudio_decode_frame(AVCode
  
      /* decode silent chunks */
      if (silent_chunks > 0) {
 -        int silent_size = FFMIN(avctx->block_align * silent_chunks,
 -                                frame->nb_samples * avctx->channels);
 +        int silent_size = avctx->block_align * silent_chunks;
++        av_assert0(avctx->block_align * silent_chunks <= frame->nb_samples * avctx->channels);
++
          if (s->out_bps == 2) {
              memset(output_samples_s16, 0x00, silent_size * 2);
              output_samples_s16 += silent_size;
  
      /* decode audio chunks */
      if (audio_chunks > 0) {
 -        buf_end = buf + (buf_size & ~(avctx->channels > 1));
 -        while (buf + s->chunk_size <= buf_end) {
 +        buf_end = buf + buf_size;
++        av_assert0((buf_size & (avctx->channels > 1)) == 0);
 +        while (buf_end - buf >= s->chunk_size) {
              if (s->out_bps == 2) {
                  decode_audio_s16(output_samples_s16, buf, s->chunk_size,
                                   avctx->channels);