# HG changeset patch # User Chris Cannam # Date 1620836769 -3600 # Wed May 12 17:26:09 2021 +0100 # Branch resampler # Node ID 201af49bf0e72862e1b5f23843b682891d774ef7 # Parent 5c6bcab3b49f1c4f61067a49ccb67a74f770076d Fix overrun diff --git a/src/BQResampler.cpp b/src/BQResampler.cpp --- a/src/BQResampler.cpp +++ b/src/BQResampler.cpp @@ -591,15 +591,17 @@ int phase_length = pr.length; double result = 0.0; + int dot_length = min(phase_length, int(s->buffer.size()) - s->left); + if (m_dynamism == RatioMostlyFixed) { int phase_start = pr.start_index; if (m_channels == 1) { result = v_multiply_and_sum (s->phase_sorted_filter.data() + phase_start, s->buffer.data() + s->left, - phase_length); + dot_length); } else { - for (int i = 0; i < phase_length; ++i) { + for (int i = 0; i < dot_length; ++i) { result += s->phase_sorted_filter[phase_start + i] * s->buffer[s->left + i * m_channels + s->current_channel]; @@ -607,7 +609,7 @@ } } else { double m = double(m_proto_length - 1) / double(s->filter_length - 1); - for (int i = 0; i < phase_length; ++i) { + for (int i = 0; i < dot_length; ++i) { double sample = s->buffer[s->left + i * m_channels + s->current_channel]; int filter_index = i * s->parameters.numerator + s->current_phase;