diff options
author | Jean-Michel Trivi <jmtrivi@google.com> | 2018-10-12 04:33:58 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2018-10-12 04:33:58 -0700 |
commit | 1c4c4a8c97a92ad43b221e9a4525e418e2662404 (patch) | |
tree | 80e43609acc276dbe9909059c238ab0fda798db4 | |
parent | 162f98a1773fe835ab29bd2f3148b60e23c22501 (diff) | |
parent | 5a025c4fea7911e913af8f3f115efda256447762 (diff) | |
download | fdk-aac-1c4c4a8c97a92ad43b221e9a4525e418e2662404.tar.gz fdk-aac-1c4c4a8c97a92ad43b221e9a4525e418e2662404.tar.bz2 fdk-aac-1c4c4a8c97a92ad43b221e9a4525e418e2662404.zip |
Merge "Prevent out of bounds accesses in lppTransposer()" into oc-dev
am: 5a025c4fea
Change-Id: I9011199b747a45a4cae8214b2e4b7b1f158ac1bc
-rw-r--r-- | Android.bp | 3 | ||||
-rw-r--r-- | libSBRdec/src/lpp_tran.cpp | 37 |
2 files changed, 27 insertions, 13 deletions
@@ -18,6 +18,9 @@ cc_library_static { "-Wno-constant-logical-operand", "-Wno-self-assign", ], + shared_libs: [ + "liblog", + ], export_include_dirs: [ "libAACdec/include", "libAACenc/include", diff --git a/libSBRdec/src/lpp_tran.cpp b/libSBRdec/src/lpp_tran.cpp index 343aec3..ae282d5 100644 --- a/libSBRdec/src/lpp_tran.cpp +++ b/libSBRdec/src/lpp_tran.cpp @@ -96,6 +96,10 @@ amm-info@iis.fraunhofer.de \sa lppTransposer(), main_audio.cpp, sbr_scale.h, \ref documentationOverview */ +#ifdef __ANDROID__ +#include "log/log.h" +#endif + #include "lpp_tran.h" #include "sbr_ram.h" @@ -256,7 +260,6 @@ void lppTransposer (HANDLE_SBR_LPP_TRANS hLppTrans, /*!< Handle of lpp transp int ovLowBandShift; int lowBandShift; /* int ovHighBandShift;*/ - int targetStopBand; alphai[0] = FL2FXCONST_SGL(0.0f); @@ -273,24 +276,32 @@ void lppTransposer (HANDLE_SBR_LPP_TRANS hLppTrans, /*!< Handle of lpp transp autoCorrLength = pSettings->nCols + pSettings->overlap; - /* Set upper subbands to zero: - This is required in case that the patches do not cover the complete highband - (because the last patch would be too short). - Possible optimization: Clearing bands up to usb would be sufficient here. */ - targetStopBand = patchParam[pSettings->noOfPatches-1].targetStartBand - + patchParam[pSettings->noOfPatches-1].numBandsInPatch; + if (pSettings->noOfPatches > 0) { + /* Set upper subbands to zero: + This is required in case that the patches do not cover the complete highband + (because the last patch would be too short). + Possible optimization: Clearing bands up to usb would be sufficient here. */ + int targetStopBand = patchParam[pSettings->noOfPatches-1].targetStartBand + + patchParam[pSettings->noOfPatches-1].numBandsInPatch; - int memSize = ((64) - targetStopBand) * sizeof(FIXP_DBL); + int memSize = ((64) - targetStopBand) * sizeof(FIXP_DBL); - if (!useLP) { + if (!useLP) { + for (i = startSample; i < stopSampleClear; i++) { + FDKmemclear(&qmfBufferReal[i][targetStopBand], memSize); + FDKmemclear(&qmfBufferImag[i][targetStopBand], memSize); + } + } else for (i = startSample; i < stopSampleClear; i++) { FDKmemclear(&qmfBufferReal[i][targetStopBand], memSize); - FDKmemclear(&qmfBufferImag[i][targetStopBand], memSize); } - } else - for (i = startSample; i < stopSampleClear; i++) { - FDKmemclear(&qmfBufferReal[i][targetStopBand], memSize); } +#ifdef __ANDROID__ + else { + // Safetynet logging + android_errorWriteLog(0x534e4554, "112160868"); + } +#endif /* init bwIndex for each patch */ FDKmemclear(bwIndex, MAX_NUM_PATCHES*sizeof(INT)); |