AnsLab的mp3解码代码对非预期mp3资源可能会越界写内存的问题

    前段时间在迁移2008的时候,发现不时会弹出个内存访问异常的错误,这其实意味着程序有危险的隐患


    经过一段痛苦的debug,定位到是mp3解码方面的问题,asnLab的解码代码,对有些非预期格式的mp3,在解码过程中可能会有越界写内存的情况


    http://read.pudn.com/downloads68/sourcecode/multimedia/audio/244141/C_Model/III_Bit_Stream/III_hufman_decode.c__.htm


    /* Read count1 area. */   
    h = &ht[(*si).ch[ch].gr[gr].count1table_select+32];   
    while ((hsstell() < part2_start + (*si).ch[ch].gr[gr].part2_3_length ) && ( i < SSLIMIT*SBLIMIT ))   
    {   
        huffman_decoder(h, &x, &y, &v, &w);   
   
        is[i/SSLIMIT][i%SSLIMIT] = (short int)v;   
        is[(i+1)/SSLIMIT][(i+1)%SSLIMIT] = (short int)w;   
        is[(i+2)/SSLIMIT][(i+2)%SSLIMIT] = (short int)x;   
        is[(i+3)/SSLIMIT][(i+3)%SSLIMIT] = (short int)y;   
        i += 4;   
    }   


   在进入这段循环前,i为某些值,比如 i=2,则在循环的最后一次,(i+3) / SSLIMIT 会得到一个 == SBLIMIT 的值,从而导致越界写错误


   从代码安全角度,给改成了 i < SSLIMIT*SBLIMIT - 3 即可:
    while ((hsstell()  part2_start + (*si).ch[ch].gr[gr].part2_3_length ) && ( i < SSLIMIT*SBLIMIT - 3 ))   


   


   

你可能感兴趣的:(AnsLab的mp3解码代码对非预期mp3资源可能会越界写内存的问题)