Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bb04dadf authored by Ray Essick's avatar Ray Essick Committed by Nikoli Cartagena
Browse files

avoid 32-bit integer overflow

change calculation to scale encoder delay and padding when sample rate
changes to use 64-bit math and avoid possible 32-bit overflow.

Bug: 67737022
Test: re-ran affected use case
Change-Id: I6e37341256f3f0e3274ffdd3bad284eaacac25ab
(cherry picked from commit 73e95a9b)
(cherry picked from commit e0d1b381)
parent 6122f998
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -5298,8 +5298,9 @@ void ACodec::sendFormatChange() {
        CHECK(mOutputFormat->findInt32("channel-count", &channelCount));
        CHECK(mOutputFormat->findInt32("sample-rate", &sampleRate));
        if (mSampleRate != 0 && sampleRate != 0) {
            mEncoderDelay = mEncoderDelay * sampleRate / mSampleRate;
            mEncoderPadding = mEncoderPadding * sampleRate / mSampleRate;
            // avoiding 32-bit overflows in intermediate values
            mEncoderDelay = (int32_t)((((int64_t)mEncoderDelay) * sampleRate) / mSampleRate);
            mEncoderPadding = (int32_t)((((int64_t)mEncoderPadding) * sampleRate) / mSampleRate);
            mSampleRate = sampleRate;
        }
        if (mSkipCutBuffer != NULL) {