return AVERROR(ENOMEM);
rangebits = get_bits(gb, 4);
+ if (!rangebits && floor_setup->data.t1.partitions) {
+ av_log(vc->avctx, AV_LOG_ERROR,
+ "A rangebits value of 0 is not compliant with the Vorbis I specification.\n");
+ return AVERROR_INVALIDDATA;
+ }
rangemax = (1 << rangebits);
if (rangemax > vc->blocksize[1] / 2) {
av_log(vc->avctx, AV_LOG_ERROR,
if (get_bits1(gb)) {
mapping_setup->coupling_steps = get_bits(gb, 8) + 1;
+ if (vc->audio_channels < 2) {
+ av_log(vc->avctx, AV_LOG_ERROR,
+ "Square polar channel mapping with less than two channels is not compliant with the Vorbis I specification.\n");
+ return AVERROR_INVALIDDATA;
+ }
mapping_setup->magnitude = av_mallocz(mapping_setup->coupling_steps *
sizeof(*mapping_setup->magnitude));
mapping_setup->angle = av_mallocz(mapping_setup->coupling_steps *