summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2020-04-21 18:11:36 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2020-04-21 18:11:36 +0000
commit00b03d21e5c47c65ac35abb8dbd8772ab4fc3fc9 (patch)
treee015a7073f265f45ca49b50c2ef5a7aba0747a9a
parent33ed4d6457e23bbb2583f92beb2513921cf77589 (diff)
parentc1aa8d1ad866aff14a2424179aa209bba806f799 (diff)
downloadsonivox-00b03d21e5c47c65ac35abb8dbd8772ab4fc3fc9.tar.gz
Fix integer overflows am: c1aa8d1ad8
Change-Id: I8334464bcc94e03c1502c89a971bf3f25c6763a6
-rw-r--r--arm-wt-22k/lib_src/eas_wtengine.c6
-rw-r--r--arm-wt-22k/lib_src/eas_wtsynth.c7
2 files changed, 10 insertions, 3 deletions
diff --git a/arm-wt-22k/lib_src/eas_wtengine.c b/arm-wt-22k/lib_src/eas_wtengine.c
index a8ba361..c3012e5 100644
--- a/arm-wt-22k/lib_src/eas_wtengine.c
+++ b/arm-wt-22k/lib_src/eas_wtengine.c
@@ -60,6 +60,10 @@ extern void WT_Interpolate (S_WT_VOICE *pWTVoice, S_WT_INT_FRAME *pWTIntFrame);
extern void WT_VoiceFilter (S_FILTER_CONTROL*pFilter, S_WT_INT_FRAME *pWTIntFrame);
#endif
+// The PRNG in WT_NoiseGenerator relies on modulo math
+#undef NO_INT_OVERFLOW_CHECKS
+#define NO_INT_OVERFLOW_CHECKS __attribute__((no_sanitize("integer")))
+
#if defined(_OPTIMIZED_MONO) || !defined(NATIVE_EAS_KERNEL) || defined(_16_BIT_SAMPLES)
/*----------------------------------------------------------------------------
* WT_VoiceGain
@@ -436,7 +440,7 @@ void WT_VoiceFilter (S_FILTER_CONTROL *pFilter, S_WT_INT_FRAME *pWTIntFrame)
* or more.
*----------------------------------------------------------------------------
*/
- void WT_NoiseGenerator (S_WT_VOICE *pWTVoice, S_WT_INT_FRAME *pWTIntFrame)
+ void NO_INT_OVERFLOW_CHECKS WT_NoiseGenerator (S_WT_VOICE *pWTVoice, S_WT_INT_FRAME *pWTIntFrame)
{
EAS_PCM *pOutputBuffer;
EAS_I32 phaseInc;
diff --git a/arm-wt-22k/lib_src/eas_wtsynth.c b/arm-wt-22k/lib_src/eas_wtsynth.c
index 987170b..d3ca3af 100644
--- a/arm-wt-22k/lib_src/eas_wtsynth.c
+++ b/arm-wt-22k/lib_src/eas_wtsynth.c
@@ -540,7 +540,6 @@ static EAS_BOOL WT_UpdateVoice (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, S_SYNTH
if (pVoice->regionIndex & FLAG_RGN_IDX_DLS_SYNTH)
return DLS_UpdateVoice(pVoiceMgr, pSynth, pVoice, voiceNum, pMixBuffer, numSamples);
#endif
-
/* establish pointers to critical data */
pWTVoice = &pVoiceMgr->wtVoices[voiceNum];
pWTRegion = &pSynth->pEAS->pWTRegions[pVoice->regionIndex & REGION_INDEX_MASK];
@@ -575,7 +574,11 @@ static EAS_BOOL WT_UpdateVoice (S_VOICE_MGR *pVoiceMgr, S_SYNTH *pSynth, S_SYNTH
else
temp += (pVoice->note + pSynth->globalTranspose) * 100;
intFrame.frame.phaseIncrement = WT_UpdatePhaseInc(pWTVoice, pArt, pChannel, temp);
- temp = pWTVoice->loopEnd - pWTVoice->loopStart;
+ if (pWTVoice->loopStart == WT_NOISE_GENERATOR) {
+ temp = 0;
+ } else {
+ temp = pWTVoice->loopEnd - pWTVoice->loopStart;
+ }
#ifdef _16_BIT_SAMPLES
temp >>= 1;
#endif