Visualization: Protect against out of bounds read
The analyzer was reading out of bounds, so guard against that. Signed-off-by: Christopher Snowhill <kode54@gmail.com>
This commit is contained in:
parent
26966c46a2
commit
014f136b7e
1 changed files with 4 additions and 4 deletions
8
Visualization/ThirdParty/deadbeef/analyzer.c
vendored
8
Visualization/ThirdParty/deadbeef/analyzer.c
vendored
|
@ -56,7 +56,7 @@ static float _bin_for_freq_round(ddb_analyzer_t *analyzer, float freq);
|
|||
static float _freq_for_bin(ddb_analyzer_t *analyzer, int bin);
|
||||
|
||||
static float
|
||||
_interpolate_bin_with_ratio(float *fft_data, int bin, float ratio);
|
||||
_interpolate_bin_with_ratio(float *fft_data, int bin, float ratio, int fft_size);
|
||||
|
||||
#pragma mark - Public
|
||||
|
||||
|
@ -137,7 +137,7 @@ void ddb_analyzer_tick(ddb_analyzer_t *analyzer) {
|
|||
float *fft_data = analyzer->fft_data + ch * analyzer->fft_size;
|
||||
ddb_analyzer_bar_t *bar = analyzer->bars;
|
||||
for(int i = 0; i < analyzer->bar_count; i++, bar++) {
|
||||
float norm_h = _interpolate_bin_with_ratio(fft_data, bar->bin, bar->ratio);
|
||||
float norm_h = _interpolate_bin_with_ratio(fft_data, bar->bin, bar->ratio, analyzer->fft_size);
|
||||
|
||||
// if the bar spans more than one bin, find the max value
|
||||
for(int b = bar->bin + 1; b <= bar->last_bin; b++) {
|
||||
|
@ -424,6 +424,6 @@ _tempered_scale_bands_precalc(ddb_analyzer_t *analyzer) {
|
|||
}
|
||||
|
||||
static float
|
||||
_interpolate_bin_with_ratio(float *fft_data, int bin, float ratio) {
|
||||
return fft_data[bin] + (fft_data[bin + 1] - fft_data[bin]) * ratio;
|
||||
_interpolate_bin_with_ratio(float *fft_data, int bin, float ratio, int fft_size) {
|
||||
return bin < fft_size ? (bin + 1 < fft_size ? (fft_data[bin] + (fft_data[bin + 1] - fft_data[bin]) * ratio) : fft_data[bin]) : 0.0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue