libavcodec/mpegaudiodec.c:2190: error: Buffer Overrun L1
  Offset: [12, +oo] (⇐ [0, +oo] + [12, 17]) Size: 2 by call to `compute_imdct`.

libavcodec/mpegaudiodec.c:1954:1: Parameter `s->mdct_buf[*]`
1952. 
1953. /* main layer3 decoding function */
1954. static int mp_decode_layer3(MPADecodeContext *s)
      ^
1955. {
1956.     int nb_granules, main_data_begin, private_bits;

libavcodec/mpegaudiodec.c:2190:13: Call
2188.             reorder_block(s, g);
2189.             s->compute_antialias(s, g);
2190.             compute_imdct(s, g, &s->sb_samples[ch][18 * gr][0], s->mdct_buf[ch]);
                  ^
2191.         }
2192.     } /* gr */

libavcodec/mpegaudiodec.c:1920:13: <Offset trace>
1918.         }
1919.         imdct12(out2, ptr + 0);
1920.         for(i=0;i<6;i++) {
                  ^
1921.             *out_ptr = MULH(out2[i], win[i]) + buf[i + 6*1];
1922.             buf[i + 6*2] = MULH(out2[i + 6], win[i + 6]);

libavcodec/mpegaudiodec.c:1920:13: Assignment
  1918.         }
  1919.         imdct12(out2, ptr + 0);
  1920.         for(i=0;i<6;i++) {
                    ^
  1921.             *out_ptr = MULH(out2[i], win[i]) + buf[i + 6*1];
  1922.             buf[i + 6*2] = MULH(out2[i + 6], win[i + 6]);

libavcodec/mpegaudiodec.c:1863:1: <Length trace>
1861. }
1862. 
1863. static void compute_imdct(MPADecodeContext *s,
      ^
1864.                           GranuleDef *g,
1865.                           int32_t *sb_samples,

libavcodec/mpegaudiodec.c:1863:1: Parameter `*mdct_buf`
  1861. }
  1862. 
  1863. static void compute_imdct(MPADecodeContext *s,
        ^
  1864.                           GranuleDef *g,
  1865.                           int32_t *sb_samples,

libavcodec/mpegaudiodec.c:1893:5: Assignment
  1891.     }
  1892. 
  1893.     buf = mdct_buf;
            ^
  1894.     ptr = g->sb_hybrid;
  1895.     for(j=0;j<mdct_long_end;j++) {

libavcodec/mpegaudiodec.c:1922:13: Array access: Offset: [12, +oo] (⇐ [0, +oo] + [12, 17]) Size: 2 by call to `compute_imdct` 
  1920.         for(i=0;i<6;i++) {
  1921.             *out_ptr = MULH(out2[i], win[i]) + buf[i + 6*1];
  1922.             buf[i + 6*2] = MULH(out2[i + 6], win[i + 6]);
                    ^
  1923.             out_ptr += SBLIMIT;
  1924.         }

static void compute_imdct(MPADecodeContext *s,
                          GranuleDef *g,
                          int32_t *sb_samples,
                          int32_t *mdct_buf)
{
    int32_t *ptr, *win, *win1, *buf, *out_ptr, *ptr1;
    int32_t out2[12];
    int i, j, mdct_long_end, v, sblimit;
    ptr = g->sb_hybrid + 576;
    ptr1 = g->sb_hybrid + 2 * 18;
    while (ptr >= ptr1) {
        ptr -= 6;
        v = ptr[0] | ptr[1] | ptr[2] | ptr[3] | ptr[4] | ptr[5];
        if (v != 0)
            break;
    }
    sblimit = ((ptr - g->sb_hybrid) / 18) + 1;
    if (g->block_type == 2) {
        if (g->switch_point)
            mdct_long_end = 2;
        else
            mdct_long_end = 0;
    } else {
        mdct_long_end = sblimit;
    }
    buf = mdct_buf;
    ptr = g->sb_hybrid;
    for(j=0;j<mdct_long_end;j++) {
        out_ptr = sb_samples + j;
        if (g->switch_point && j < 2)
            win1 = mdct_win[0];
        else
            win1 = mdct_win[g->block_type];
        win = win1 + ((4 * 36) & -(j & 1));
        imdct36(out_ptr, buf, ptr, win);
        out_ptr += 18*SBLIMIT;
        ptr += 18;
        buf += 18;
    }
    for(j=mdct_long_end;j<sblimit;j++) {
        win = mdct_win[2] + ((4 * 36) & -(j & 1));
        out_ptr = sb_samples + j;
        for(i=0; i<6; i++){
            *out_ptr = buf[i];
            out_ptr += SBLIMIT;
        }
        imdct12(out2, ptr + 0);
        for(i=0;i<6;i++) {
            *out_ptr = MULH(out2[i], win[i]) + buf[i + 6*1];
            buf[i + 6*2] = MULH(out2[i + 6], win[i + 6]);
            out_ptr += SBLIMIT;
        }
        imdct12(out2, ptr + 1);
        for(i=0;i<6;i++) {
            *out_ptr = MULH(out2[i], win[i]) + buf[i + 6*2];
            buf[i + 6*0] = MULH(out2[i + 6], win[i + 6]);
            out_ptr += SBLIMIT;
        }
        imdct12(out2, ptr + 2);
        for(i=0;i<6;i++) {
            buf[i + 6*0] = MULH(out2[i], win[i]) + buf[i + 6*0];
            buf[i + 6*1] = MULH(out2[i + 6], win[i + 6]);
            buf[i + 6*2] = 0;
        }
        ptr += 18;
        buf += 18;
    }
    for(j=sblimit;j<SBLIMIT;j++) {
        out_ptr = sb_samples + j;
        for(i=0;i<18;i++) {
            *out_ptr = buf[i];
            buf[i] = 0;
            out_ptr += SBLIMIT;
        }
        buf += 18;
    }
}
['static int mp_decode_layer3(MPADecodeContext *s)\n{\n    int nb_granules, main_data_begin, private_bits;\n    int gr, ch, blocksplit_flag, i, j, k, n, bits_pos;\n    GranuleDef granules[2][2], *g;\n    int16_t exponents[576];\n    if (s->lsf) {\n        main_data_begin = get_bits(&s->gb, 8);\n        private_bits = get_bits(&s->gb, s->nb_channels);\n        nb_granules = 1;\n    } else {\n        main_data_begin = get_bits(&s->gb, 9);\n        if (s->nb_channels == 2)\n            private_bits = get_bits(&s->gb, 3);\n        else\n            private_bits = get_bits(&s->gb, 5);\n        nb_granules = 2;\n        for(ch=0;ch<s->nb_channels;ch++) {\n            granules[ch][0].scfsi = 0;\n            granules[ch][1].scfsi = get_bits(&s->gb, 4);\n        }\n    }\n    for(gr=0;gr<nb_granules;gr++) {\n        for(ch=0;ch<s->nb_channels;ch++) {\n            dprintf(s->avctx, "gr=%d ch=%d: side_info\\n", gr, ch);\n            g = &granules[ch][gr];\n            g->part2_3_length = get_bits(&s->gb, 12);\n            g->big_values = get_bits(&s->gb, 9);\n            if(g->big_values > 288){\n                av_log(s->avctx, AV_LOG_ERROR, "big_values too big\\n");\n                return -1;\n            }\n            g->global_gain = get_bits(&s->gb, 8);\n            if ((s->mode_ext & (MODE_EXT_MS_STEREO | MODE_EXT_I_STEREO)) ==\n                MODE_EXT_MS_STEREO)\n                g->global_gain -= 2;\n            if (s->lsf)\n                g->scalefac_compress = get_bits(&s->gb, 9);\n            else\n                g->scalefac_compress = get_bits(&s->gb, 4);\n            blocksplit_flag = get_bits1(&s->gb);\n            if (blocksplit_flag) {\n                g->block_type = get_bits(&s->gb, 2);\n                if (g->block_type == 0){\n                    av_log(s->avctx, AV_LOG_ERROR, "invalid block type\\n");\n                    return -1;\n                }\n                g->switch_point = get_bits1(&s->gb);\n                for(i=0;i<2;i++)\n                    g->table_select[i] = get_bits(&s->gb, 5);\n                for(i=0;i<3;i++)\n                    g->subblock_gain[i] = get_bits(&s->gb, 3);\n                ff_init_short_region(s, g);\n            } else {\n                int region_address1, region_address2;\n                g->block_type = 0;\n                g->switch_point = 0;\n                for(i=0;i<3;i++)\n                    g->table_select[i] = get_bits(&s->gb, 5);\n                region_address1 = get_bits(&s->gb, 4);\n                region_address2 = get_bits(&s->gb, 3);\n                dprintf(s->avctx, "region1=%d region2=%d\\n",\n                        region_address1, region_address2);\n                ff_init_long_region(s, g, region_address1, region_address2);\n            }\n            ff_region_offset2size(g);\n            ff_compute_band_indexes(s, g);\n            g->preflag = 0;\n            if (!s->lsf)\n                g->preflag = get_bits1(&s->gb);\n            g->scalefac_scale = get_bits1(&s->gb);\n            g->count1table_select = get_bits1(&s->gb);\n            dprintf(s->avctx, "block_type=%d switch_point=%d\\n",\n                    g->block_type, g->switch_point);\n        }\n    }\n  if (!s->adu_mode) {\n    const uint8_t *ptr = s->gb.buffer + (get_bits_count(&s->gb)>>3);\n    assert((get_bits_count(&s->gb) & 7) == 0);\n    dprintf(s->avctx, "seekback: %d\\n", main_data_begin);\n    memcpy(s->last_buf + s->last_buf_size, ptr, EXTRABYTES);\n    s->in_gb= s->gb;\n        init_get_bits(&s->gb, s->last_buf, s->last_buf_size*8);\n        skip_bits_long(&s->gb, 8*(s->last_buf_size - main_data_begin));\n  }\n    for(gr=0;gr<nb_granules;gr++) {\n        for(ch=0;ch<s->nb_channels;ch++) {\n            g = &granules[ch][gr];\n            if(get_bits_count(&s->gb)<0){\n                av_log(s->avctx, AV_LOG_ERROR, "mdb:%d, lastbuf:%d skipping granule %d\\n",\n                                            main_data_begin, s->last_buf_size, gr);\n                skip_bits_long(&s->gb, g->part2_3_length);\n                memset(g->sb_hybrid, 0, sizeof(g->sb_hybrid));\n                if(get_bits_count(&s->gb) >= s->gb.size_in_bits && s->in_gb.buffer){\n                    skip_bits_long(&s->in_gb, get_bits_count(&s->gb) - s->gb.size_in_bits);\n                    s->gb= s->in_gb;\n                    s->in_gb.buffer=NULL;\n                }\n                continue;\n            }\n            bits_pos = get_bits_count(&s->gb);\n            if (!s->lsf) {\n                uint8_t *sc;\n                int slen, slen1, slen2;\n                slen1 = slen_table[0][g->scalefac_compress];\n                slen2 = slen_table[1][g->scalefac_compress];\n                dprintf(s->avctx, "slen1=%d slen2=%d\\n", slen1, slen2);\n                if (g->block_type == 2) {\n                    n = g->switch_point ? 17 : 18;\n                    j = 0;\n                    if(slen1){\n                        for(i=0;i<n;i++)\n                            g->scale_factors[j++] = get_bits(&s->gb, slen1);\n                    }else{\n                        for(i=0;i<n;i++)\n                            g->scale_factors[j++] = 0;\n                    }\n                    if(slen2){\n                        for(i=0;i<18;i++)\n                            g->scale_factors[j++] = get_bits(&s->gb, slen2);\n                        for(i=0;i<3;i++)\n                            g->scale_factors[j++] = 0;\n                    }else{\n                        for(i=0;i<21;i++)\n                            g->scale_factors[j++] = 0;\n                    }\n                } else {\n                    sc = granules[ch][0].scale_factors;\n                    j = 0;\n                    for(k=0;k<4;k++) {\n                        n = (k == 0 ? 6 : 5);\n                        if ((g->scfsi & (0x8 >> k)) == 0) {\n                            slen = (k < 2) ? slen1 : slen2;\n                            if(slen){\n                                for(i=0;i<n;i++)\n                                    g->scale_factors[j++] = get_bits(&s->gb, slen);\n                            }else{\n                                for(i=0;i<n;i++)\n                                    g->scale_factors[j++] = 0;\n                            }\n                        } else {\n                            for(i=0;i<n;i++) {\n                                g->scale_factors[j] = sc[j];\n                                j++;\n                            }\n                        }\n                    }\n                    g->scale_factors[j++] = 0;\n                }\n            } else {\n                int tindex, tindex2, slen[4], sl, sf;\n                if (g->block_type == 2) {\n                    tindex = g->switch_point ? 2 : 1;\n                } else {\n                    tindex = 0;\n                }\n                sf = g->scalefac_compress;\n                if ((s->mode_ext & MODE_EXT_I_STEREO) && ch == 1) {\n                    sf >>= 1;\n                    if (sf < 180) {\n                        lsf_sf_expand(slen, sf, 6, 6, 0);\n                        tindex2 = 3;\n                    } else if (sf < 244) {\n                        lsf_sf_expand(slen, sf - 180, 4, 4, 0);\n                        tindex2 = 4;\n                    } else {\n                        lsf_sf_expand(slen, sf - 244, 3, 0, 0);\n                        tindex2 = 5;\n                    }\n                } else {\n                    if (sf < 400) {\n                        lsf_sf_expand(slen, sf, 5, 4, 4);\n                        tindex2 = 0;\n                    } else if (sf < 500) {\n                        lsf_sf_expand(slen, sf - 400, 5, 4, 0);\n                        tindex2 = 1;\n                    } else {\n                        lsf_sf_expand(slen, sf - 500, 3, 0, 0);\n                        tindex2 = 2;\n                        g->preflag = 1;\n                    }\n                }\n                j = 0;\n                for(k=0;k<4;k++) {\n                    n = lsf_nsf_table[tindex2][tindex][k];\n                    sl = slen[k];\n                    if(sl){\n                        for(i=0;i<n;i++)\n                            g->scale_factors[j++] = get_bits(&s->gb, sl);\n                    }else{\n                        for(i=0;i<n;i++)\n                            g->scale_factors[j++] = 0;\n                    }\n                }\n                for(;j<40;j++)\n                    g->scale_factors[j] = 0;\n            }\n            exponents_from_scale_factors(s, g, exponents);\n            huffman_decode(s, g, exponents, bits_pos + g->part2_3_length);\n        }\n        if (s->nb_channels == 2)\n            compute_stereo(s, &granules[0][gr], &granules[1][gr]);\n        for(ch=0;ch<s->nb_channels;ch++) {\n            g = &granules[ch][gr];\n            reorder_block(s, g);\n            s->compute_antialias(s, g);\n            compute_imdct(s, g, &s->sb_samples[ch][18 * gr][0], s->mdct_buf[ch]);\n        }\n    }\n    if(get_bits_count(&s->gb)<0)\n        skip_bits_long(&s->gb, -get_bits_count(&s->gb));\n    return nb_granules * 18;\n}', 'static void compute_imdct(MPADecodeContext *s,\n                          GranuleDef *g,\n                          int32_t *sb_samples,\n                          int32_t *mdct_buf)\n{\n    int32_t *ptr, *win, *win1, *buf, *out_ptr, *ptr1;\n    int32_t out2[12];\n    int i, j, mdct_long_end, v, sblimit;\n    ptr = g->sb_hybrid + 576;\n    ptr1 = g->sb_hybrid + 2 * 18;\n    while (ptr >= ptr1) {\n        ptr -= 6;\n        v = ptr[0] | ptr[1] | ptr[2] | ptr[3] | ptr[4] | ptr[5];\n        if (v != 0)\n            break;\n    }\n    sblimit = ((ptr - g->sb_hybrid) / 18) + 1;\n    if (g->block_type == 2) {\n        if (g->switch_point)\n            mdct_long_end = 2;\n        else\n            mdct_long_end = 0;\n    } else {\n        mdct_long_end = sblimit;\n    }\n    buf = mdct_buf;\n    ptr = g->sb_hybrid;\n    for(j=0;j<mdct_long_end;j++) {\n        out_ptr = sb_samples + j;\n        if (g->switch_point && j < 2)\n            win1 = mdct_win[0];\n        else\n            win1 = mdct_win[g->block_type];\n        win = win1 + ((4 * 36) & -(j & 1));\n        imdct36(out_ptr, buf, ptr, win);\n        out_ptr += 18*SBLIMIT;\n        ptr += 18;\n        buf += 18;\n    }\n    for(j=mdct_long_end;j<sblimit;j++) {\n        win = mdct_win[2] + ((4 * 36) & -(j & 1));\n        out_ptr = sb_samples + j;\n        for(i=0; i<6; i++){\n            *out_ptr = buf[i];\n            out_ptr += SBLIMIT;\n        }\n        imdct12(out2, ptr + 0);\n        for(i=0;i<6;i++) {\n            *out_ptr = MULH(out2[i], win[i]) + buf[i + 6*1];\n            buf[i + 6*2] = MULH(out2[i + 6], win[i + 6]);\n            out_ptr += SBLIMIT;\n        }\n        imdct12(out2, ptr + 1);\n        for(i=0;i<6;i++) {\n            *out_ptr = MULH(out2[i], win[i]) + buf[i + 6*2];\n            buf[i + 6*0] = MULH(out2[i + 6], win[i + 6]);\n            out_ptr += SBLIMIT;\n        }\n        imdct12(out2, ptr + 2);\n        for(i=0;i<6;i++) {\n            buf[i + 6*0] = MULH(out2[i], win[i]) + buf[i + 6*0];\n            buf[i + 6*1] = MULH(out2[i + 6], win[i + 6]);\n            buf[i + 6*2] = 0;\n        }\n        ptr += 18;\n        buf += 18;\n    }\n    for(j=sblimit;j<SBLIMIT;j++) {\n        out_ptr = sb_samples + j;\n        for(i=0;i<18;i++) {\n            *out_ptr = buf[i];\n            buf[i] = 0;\n            out_ptr += SBLIMIT;\n        }\n        buf += 18;\n    }\n}']