Revisão | 2bf8c9431e7d7b17dbcc252deee80bedbef724a6 (tree) |
---|---|
Hora | 2014-08-21 11:01:54 |
Autor | yta <yta@inte...> |
Commiter | TAMUKI Shoichi |
Fix reverb buffer-overrun issue
Add code to check the upper limit of the index. TiMidity++ to buffer-
overrun when the value of the reverb_status_gs.character was a 6 or 7.
info->index is set to a value out of range when the value of the
"Reverb Time" was -64.
Signed-off-by: yta <yta@inter7.jp>
@@ -1600,6 +1600,9 @@ static void init_ch_reverb_delay(InfoDelay3 *info) | ||
1600 | 1600 | set_delay(&(info->delayL), x); |
1601 | 1601 | set_delay(&(info->delayR), x); |
1602 | 1602 | info->index[0] = x - info->size[0]; |
1603 | + if (info->index[0] >= info->size[0]) { | |
1604 | + info->index[0] = (info->size[0] == 0) ? 0 : info->size[0] - 1; | |
1605 | + } | |
1603 | 1606 | info->level[0] = (double)reverb_status_gs.level * 1.82 / 127.0; |
1604 | 1607 | info->feedback = sqrt((double)reverb_status_gs.delay_feedback / 127.0) * 0.98; |
1605 | 1608 | info->leveli[0] = TIM_FSCALE(info->level[0], 24); |