Mercurial > libavcodec.hg
comparison wmadec.c @ 7242:d90bc6cc1bfd libavcodec
Check that we have enough output space available.
author | michael |
---|---|
date | Fri, 11 Jul 2008 19:45:52 +0000 |
parents | e943e1409077 |
children | 158c8bc08f81 |
comparison
equal
deleted
inserted
replaced
7241:239031d20617 | 7242:d90bc6cc1bfd |
---|---|
779 if (s->use_bit_reservoir) { | 779 if (s->use_bit_reservoir) { |
780 /* read super frame header */ | 780 /* read super frame header */ |
781 skip_bits(&s->gb, 4); /* super frame index */ | 781 skip_bits(&s->gb, 4); /* super frame index */ |
782 nb_frames = get_bits(&s->gb, 4) - 1; | 782 nb_frames = get_bits(&s->gb, 4) - 1; |
783 | 783 |
784 if((nb_frames+1) * s->nb_channels * s->frame_len * sizeof(int16_t) > *data_size){ | |
785 av_log(s->avctx, AV_LOG_ERROR, "Insufficient output space\n"); | |
786 goto fail; | |
787 } | |
788 | |
784 bit_offset = get_bits(&s->gb, s->byte_offset_bits + 3); | 789 bit_offset = get_bits(&s->gb, s->byte_offset_bits + 3); |
785 | 790 |
786 if (s->last_superframe_len > 0) { | 791 if (s->last_superframe_len > 0) { |
787 // printf("skip=%d\n", s->last_bitoffset); | 792 // printf("skip=%d\n", s->last_bitoffset); |
788 /* add bit_offset bits to last frame */ | 793 /* add bit_offset bits to last frame */ |
834 goto fail; | 839 goto fail; |
835 } | 840 } |
836 s->last_superframe_len = len; | 841 s->last_superframe_len = len; |
837 memcpy(s->last_superframe, buf + pos, len); | 842 memcpy(s->last_superframe, buf + pos, len); |
838 } else { | 843 } else { |
844 if(s->nb_channels * s->frame_len * sizeof(int16_t) > *data_size){ | |
845 av_log(s->avctx, AV_LOG_ERROR, "Insufficient output space\n"); | |
846 goto fail; | |
847 } | |
839 /* single frame decode */ | 848 /* single frame decode */ |
840 if (wma_decode_frame(s, samples) < 0) | 849 if (wma_decode_frame(s, samples) < 0) |
841 goto fail; | 850 goto fail; |
842 samples += s->nb_channels * s->frame_len; | 851 samples += s->nb_channels * s->frame_len; |
843 } | 852 } |