1
0
mirror of https://github.com/mstorsjo/fdk-aac.git synced 2025-02-18 04:00:36 +01:00

Prevent integer overflow in sbrDecoder_calculateGainVec().

Bug: 131430997
Test: atest DecoderTestXheAac ; atest DecoderTestAacDrc
Change-Id: I359f7f976a5ad5459be7d7b786145988a175e305
This commit is contained in:
Fraunhofer IIS FDK 2019-10-18 14:02:38 +02:00 committed by Jean-Michel Trivi
parent 2152ae1a5e
commit a7029823f4

View File

@ -1,7 +1,7 @@
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
Software License for The Fraunhofer FDK AAC Codec Library for Android Software License for The Fraunhofer FDK AAC Codec Library for Android
© Copyright 1995 - 2018 Fraunhofer-Gesellschaft zur Förderung der angewandten © Copyright 1995 - 2019 Fraunhofer-Gesellschaft zur Förderung der angewandten
Forschung e.V. All rights reserved. Forschung e.V. All rights reserved.
1. INTRODUCTION 1. INTRODUCTION
@ -904,14 +904,15 @@ void sbrDecoder_calculateGainVec(FIXP_DBL **sourceBufferReal,
} }
if (maxVal != FL2FX_DBL(0.0f)) { if (maxVal != FL2FX_DBL(0.0f)) {
reserve = fixMax(0, CntLeadingZeros(maxVal) - 2); reserve = CntLeadingZeros(maxVal) - 2;
} }
nrg_ov = nrg = (FIXP_DBL)0; nrg_ov = nrg = (FIXP_DBL)0;
if (scale_nrg_ov > -31) { if (scale_nrg_ov > -31) {
for (i = startSample; i < overlap; i++) { for (i = startSample; i < overlap; i++) {
nrg_ov += (fPow2Div2(sourceBufferReal[i][loBand] << reserve) + nrg_ov +=
fPow2Div2(sourceBufferImag[i][loBand] << reserve)) >> (fPow2Div2(scaleValue(sourceBufferReal[i][loBand], reserve)) +
fPow2Div2(scaleValue(sourceBufferImag[i][loBand], reserve))) >>
sum_scale_ov; sum_scale_ov;
} }
} else { } else {
@ -919,8 +920,8 @@ void sbrDecoder_calculateGainVec(FIXP_DBL **sourceBufferReal,
} }
if (scale_nrg > -31) { if (scale_nrg > -31) {
for (i = overlap; i < stopSample; i++) { for (i = overlap; i < stopSample; i++) {
nrg += (fPow2Div2(sourceBufferReal[i][loBand] << reserve) + nrg += (fPow2Div2(scaleValue(sourceBufferReal[i][loBand], reserve)) +
fPow2Div2(sourceBufferImag[i][loBand] << reserve)) >> fPow2Div2(scaleValue(sourceBufferImag[i][loBand], reserve))) >>
sum_scale; sum_scale;
} }
} else { } else {