aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2018-06-03 01:33:54 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2018-07-10 01:52:56 +0200
commit4c3a7aaea8ba76225780bd867a053bb0084503d6 (patch)
tree0145c573237132796dde7646df6cbc726873ce36
parent832d9accfc23b837a3c6e10fd92c9a5a6129bf0b (diff)
downloadffmpeg-4c3a7aaea8ba76225780bd867a053bb0084503d6.tar.gz
avcodec/opus_silk: Change silk_lsf2lpc() slightly toward silk/NLSF2A.c
Fixes: runtime error: signed integer overflow: -1440457022 - 785819492 cannot be represented in type 'int' Fixes: 7700/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_OPUS_fuzzer-6595838684954624 Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg Signed-off-by: Michael Niedermayer <michael@niedermayer.cc> (cherry picked from commit e7dda51150b73e5fbdccf4c2d3a72e356980fba3) Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavcodec/opus_silk.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/libavcodec/opus_silk.c b/libavcodec/opus_silk.c
index 408e4bf43c..6418743b6b 100644
--- a/libavcodec/opus_silk.c
+++ b/libavcodec/opus_silk.c
@@ -955,8 +955,10 @@ static void silk_lsf2lpc(const int16_t nlsf[16], float lpcf[16], int order)
/* reconstruct A(z) */
for (k = 0; k < order>>1; k++) {
- lpc32[k] = -p[k + 1] - p[k] - q[k + 1] + q[k];
- lpc32[order-k-1] = -p[k + 1] - p[k] + q[k + 1] - q[k];
+ int32_t p_tmp = p[k + 1] + p[k];
+ int32_t q_tmp = q[k + 1] - q[k];
+ lpc32[k] = -q_tmp - p_tmp;
+ lpc32[order-k-1] = q_tmp - p_tmp;
}
/* limit the range of the LPC coefficients to each fit within an int16_t */