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 }