From c14b7ed479b8efb38ca04ea536272bd7a2d4f0ff Mon Sep 17 00:00:00 2001 From: kwiberg Date: Mon, 30 Jan 2017 12:17:05 -0800 Subject: [PATCH] iSAC float decoder: Don't read past end of initialized part of buffer We read past the end of the initialized part of the buffer, seemingly on purpose (no one knows the details of this code anymore). The right thing to do is probably to zero that part of the buffer. (The *right* right thing to would be to rewrite this so that it was easier to see what data was supposed to be where when, but priorities...) BUG=chromium:683040 Review-Url: https://codereview.webrtc.org/2659383002 Cr-Commit-Position: refs/heads/master@{#16365} --- .../audio_coding/codecs/isac/main/source/pitch_filter.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/webrtc/modules/audio_coding/codecs/isac/main/source/pitch_filter.c b/webrtc/modules/audio_coding/codecs/isac/main/source/pitch_filter.c index f03d230e65..cdb30a74e7 100644 --- a/webrtc/modules/audio_coding/codecs/isac/main/source/pitch_filter.c +++ b/webrtc/modules/audio_coding/codecs/isac/main/source/pitch_filter.c @@ -16,6 +16,8 @@ #include "os_specific_inline.h" +#include "webrtc/system_wrappers/include/compile_assert_c.h" + /* * We are implementing the following filters; * @@ -275,6 +277,11 @@ static void FilterFrame(const double* in_data, PitchFiltstr* filter_state, /* Copy states to local variables. */ memcpy(filter_parameters.buffer, filter_state->ubuf, sizeof(filter_state->ubuf)); + COMPILE_ASSERT(sizeof(filter_parameters.buffer) >= + sizeof(filter_state->ubuf)); + memset(filter_parameters.buffer + + sizeof(filter_state->ubuf) / sizeof(filter_state->ubuf[0]), + 0, sizeof(filter_parameters.buffer) - sizeof(filter_state->ubuf)); memcpy(filter_parameters.damper_state, filter_state->ystate, sizeof(filter_state->ystate));