diff options
author | Marco Nelissen <marcone@google.com> | 2020-04-21 18:11:36 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2020-04-21 18:11:36 +0000 |
commit | 00b03d21e5c47c65ac35abb8dbd8772ab4fc3fc9 (patch) | |
tree | e015a7073f265f45ca49b50c2ef5a7aba0747a9a | |
parent | 33ed4d6457e23bbb2583f92beb2513921cf77589 (diff) | |
parent | c1aa8d1ad866aff14a2424179aa209bba806f799 (diff) | |
download | sonivox-00b03d21e5c47c65ac35abb8dbd8772ab4fc3fc9.tar.gz |
Fix integer overflows am: c1aa8d1ad8
Change-Id: I8334464bcc94e03c1502c89a971bf3f25c6763a6
-rw-r--r-- | arm-wt-22k/lib_src/eas_wtengine.c | 6 | ||||
-rw-r--r-- | arm-wt-22k/lib_src/eas_wtsynth.c | 7 |
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 |