Mercurial > libavcodec.hg
comparison vorbis_dec.c @ 10244:ae97152542d1 libavcodec
Add checks for per-packet mode indexes and per-header mode mapping indexes.
12_vorbis_mode_indexes.patch by chrome
maybe exploitable
author | michael |
---|---|
date | Wed, 23 Sep 2009 12:09:33 +0000 |
parents | add8ca5921ab |
children | 8da436e9793d |
comparison
equal
deleted
inserted
replaced
10243:add8ca5921ab | 10244:ae97152542d1 |
---|---|
791 vorbis_mode *mode_setup=&vc->modes[i]; | 791 vorbis_mode *mode_setup=&vc->modes[i]; |
792 | 792 |
793 mode_setup->blockflag=get_bits1(gb); | 793 mode_setup->blockflag=get_bits1(gb); |
794 mode_setup->windowtype=get_bits(gb, 16); //FIXME check | 794 mode_setup->windowtype=get_bits(gb, 16); //FIXME check |
795 mode_setup->transformtype=get_bits(gb, 16); //FIXME check | 795 mode_setup->transformtype=get_bits(gb, 16); //FIXME check |
796 mode_setup->mapping=get_bits(gb, 8); //FIXME check | 796 mode_setup->mapping=get_bits(gb, 8); |
797 if (mode_setup->mapping>=vc->mapping_count) { | |
798 av_log(vc->avccontext, AV_LOG_ERROR, "mode mapping value %d out of range. \n", mode_setup->mapping); | |
799 return 1; | |
800 } | |
797 | 801 |
798 AV_DEBUG(" %d mode: blockflag %d, windowtype %d, transformtype %d, mapping %d \n", i, mode_setup->blockflag, mode_setup->windowtype, mode_setup->transformtype, mode_setup->mapping); | 802 AV_DEBUG(" %d mode: blockflag %d, windowtype %d, transformtype %d, mapping %d \n", i, mode_setup->blockflag, mode_setup->windowtype, mode_setup->transformtype, mode_setup->mapping); |
799 } | 803 } |
800 return 0; | 804 return 0; |
801 } | 805 } |
1448 if (vc->mode_count==1) { | 1452 if (vc->mode_count==1) { |
1449 mode_number=0; | 1453 mode_number=0; |
1450 } else { | 1454 } else { |
1451 mode_number=get_bits(gb, ilog(vc->mode_count-1)); | 1455 mode_number=get_bits(gb, ilog(vc->mode_count-1)); |
1452 } | 1456 } |
1457 if (mode_number>=vc->mode_count) { | |
1458 av_log(vc->avccontext, AV_LOG_ERROR, "mode number %d out of range.\n", mode_number); | |
1459 return -1; | |
1460 } | |
1453 vc->mode_number=mode_number; | 1461 vc->mode_number=mode_number; |
1454 mapping=&vc->mappings[vc->modes[mode_number].mapping]; | 1462 mapping=&vc->mappings[vc->modes[mode_number].mapping]; |
1455 | 1463 |
1456 AV_DEBUG(" Mode number: %d , mapping: %d , blocktype %d \n", mode_number, vc->modes[mode_number].mapping, vc->modes[mode_number].blockflag); | 1464 AV_DEBUG(" Mode number: %d , mapping: %d , blocktype %d \n", mode_number, vc->modes[mode_number].mapping, vc->modes[mode_number].blockflag); |
1457 | 1465 |