Browse Source

Check submap indexes.

10_vorbis_submap_indexes.patch by chrome.
I am applying this even though Reimar had some comments to improve it as it fixes
a serious security issue and I do not want to leave such things unfixed.

backport r20001 by michael


Originally committed as revision 21730 to svn://svn.ffmpeg.org/ffmpeg/branches/0.5
tags/v0.5.1
Google Chrome Reinhard Tartler 16 years ago
parent
commit
9e3935dfd8
1 changed files with 13 additions and 2 deletions
  1. +13
    -2
      libavcodec/vorbis_dec.c

+ 13
- 2
libavcodec/vorbis_dec.c View File

@@ -757,9 +757,20 @@ static int vorbis_parse_setup_hdr_mappings(vorbis_context *vc) {
}

for(j=0;j<mapping_setup->submaps;++j) {
int bits;
skip_bits(gb, 8); // FIXME check?
mapping_setup->submap_floor[j]=get_bits(gb, 8);
mapping_setup->submap_residue[j]=get_bits(gb, 8);
bits=get_bits(gb, 8);
if (bits>=vc->floor_count) {
av_log(vc->avccontext, AV_LOG_ERROR, "submap floor value %d out of range. \n", bits);
return -1;
}
mapping_setup->submap_floor[j]=bits;
bits=get_bits(gb, 8);
if (bits>=vc->residue_count) {
av_log(vc->avccontext, AV_LOG_ERROR, "submap residue value %d out of range. \n", bits);
return -1;
}
mapping_setup->submap_residue[j]=bits;

AV_DEBUG(" %d mapping %d submap : floor %d, residue %d \n", i, j, mapping_setup->submap_floor[j], mapping_setup->submap_residue[j]);
}


Loading…
Cancel
Save