1
0
mirror of https://github.com/mstorsjo/fdk-aac.git synced 2025-02-16 19:30:34 +01:00

Merge "Prevent signed integer overflow in calc_qmfBufferReal()." into sc-dev am: b0a46baf90

Original change: https://googleplex-android-review.googlesource.com/c/platform/external/aac/+/14387477

Change-Id: Iff2c573663790abf3cd5695ec7a00e89bfd2eaa5
This commit is contained in:
TreeHugger Robot 2021-04-30 22:21:20 +00:00 committed by Automerger Merge Worker
commit 4f432296b9

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 - 2019 Fraunhofer-Gesellschaft zur Förderung der angewandten © Copyright 1995 - 2020 Fraunhofer-Gesellschaft zur Förderung der angewandten
Forschung e.V. All rights reserved. Forschung e.V. All rights reserved.
1. INTRODUCTION 1. INTRODUCTION
@ -216,19 +216,21 @@ static inline void calc_qmfBufferReal(FIXP_DBL **qmfBufferReal,
const FIXP_DBL *const lowBandReal, const FIXP_DBL *const lowBandReal,
const int startSample, const int startSample,
const int stopSample, const UCHAR hiBand, const int stopSample, const UCHAR hiBand,
const int dynamicScale, const int descale, const int dynamicScale,
const FIXP_SGL a0r, const FIXP_SGL a1r) { const FIXP_SGL a0r, const FIXP_SGL a1r) {
FIXP_DBL accu1, accu2; const int dynscale = fixMax(0, dynamicScale - 1) + 1;
int i; const int rescale = -fixMin(0, dynamicScale - 1) + 1;
const int descale =
fixMin(DFRACT_BITS - 1, LPC_SCALE_FACTOR + dynamicScale + rescale);
for (i = 0; i < stopSample - startSample; i++) { for (int i = 0; i < stopSample - startSample; i++) {
accu1 = fMultDiv2(a1r, lowBandReal[i]); FIXP_DBL accu;
accu1 = (fMultDiv2(a0r, lowBandReal[i + 1]) + accu1);
accu1 = accu1 >> dynamicScale;
accu1 <<= 1; accu = fMultDiv2(a1r, lowBandReal[i]) + fMultDiv2(a0r, lowBandReal[i + 1]);
accu2 = (lowBandReal[i + 2] >> descale); accu = (lowBandReal[i + 2] >> descale) + (accu >> dynscale);
qmfBufferReal[i + startSample][hiBand] = accu1 + accu2;
qmfBufferReal[i + startSample][hiBand] =
SATURATE_LEFT_SHIFT(accu, rescale, DFRACT_BITS);
} }
} }
@ -810,9 +812,7 @@ void lppTransposer(
FDK_ASSERT(dynamicScale >= 0); FDK_ASSERT(dynamicScale >= 0);
calc_qmfBufferReal( calc_qmfBufferReal(
qmfBufferReal, &(lowBandReal[LPC_ORDER + startSample - 2]), qmfBufferReal, &(lowBandReal[LPC_ORDER + startSample - 2]),
startSample, stopSample, hiBand, dynamicScale, startSample, stopSample, hiBand, dynamicScale, a0r, a1r);
fMin(DFRACT_BITS - 1, (LPC_SCALE_FACTOR + dynamicScale)), a0r,
a1r);
} }
} /* bw <= 0 */ } /* bw <= 0 */