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
1 changed files with 8 additions and 7 deletions

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,23 +904,24 @@ 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)) +
sum_scale_ov; fPow2Div2(scaleValue(sourceBufferImag[i][loBand], reserve))) >>
sum_scale_ov;
} }
} else { } else {
scale_nrg_ov = 0; scale_nrg_ov = 0;
} }
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 {