# HG changeset patch # User reimar # Date 1247081963 0 # Node ID ff96ee73b08be0b24ea3f2a6279f7efa150f8f51 # Parent 6fd0b776f838b8d4f73786f4d82913999a9698fa Add extra validation checks to ff_vorbis_len2vlc. They should not be necessary, but it seems like a reasonable precaution. diff -r 6fd0b776f838 -r ff96ee73b08b vorbis.c --- a/vorbis.c Wed Jul 08 19:31:04 2009 +0000 +++ b/vorbis.c Wed Jul 08 19:39:23 2009 +0000 @@ -45,6 +45,9 @@ // Generate vlc codes from vorbis huffman code lengths +// the two bits[p] > 32 checks should be redundant, all calling code should +// already ensure that, but since it allows overwriting the stack it seems +// reasonable to check redundantly. int ff_vorbis_len2vlc(uint8_t *bits, uint32_t *codes, uint_fast32_t num) { uint_fast32_t exit_at_level[33]={404,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; @@ -63,6 +66,7 @@ } codes[p]=0; + if (bits[p] > 32) return 1; for(i=0;i 32) return 1; if (bits[p]==0) continue; // find corresponding exit(node which the tree can grow further from) for(i=bits[p];i>0;--i) {