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

Commit f98dd675 authored by Aayush Soni's avatar Aayush Soni
Browse files

C2SoftFlacEnc: Fix integer overflows

Fix integer overflows leading to crash in C2SoftFlacEnc.cpp by changing data type of timestamp variables

Bug: 292860985
Test: POC in bug descriptions

Test: atest VtsHalMediaC2V1_0TargetAudioEncTest
Test: atest android.mediav2.cts.AudioEncoderTest

Change-Id: I92b171ae0f095f2eb57a444be768724196a808c0
parent 06d20c68
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -138,7 +138,7 @@ c2_status_t C2SoftFlacEnc::onInit() {
    mSignalledError = false;
    mSignalledOutputEos = false;
    mIsFirstFrame = true;
    mAnchorTimeStamp = 0ull;
    mAnchorTimeStamp = 0;
    mProcessedSamples = 0u;
    mEncoderWriteData = false;
    mEncoderReturnedNbBytes = 0;
@@ -169,7 +169,7 @@ c2_status_t C2SoftFlacEnc::onStop() {
    mSignalledError = false;
    mSignalledOutputEos = false;
    mIsFirstFrame = true;
    mAnchorTimeStamp = 0ull;
    mAnchorTimeStamp = 0;
    mProcessedSamples = 0u;
    mEncoderWriteData = false;
    mEncoderReturnedNbBytes = 0;
@@ -219,7 +219,7 @@ void C2SoftFlacEnc::process(
              inSize, (int)work->input.ordinal.timestamp.peeku(),
              (int)work->input.ordinal.frameIndex.peeku(), work->input.flags);
    if (mIsFirstFrame && inSize) {
        mAnchorTimeStamp = work->input.ordinal.timestamp.peekull();
        mAnchorTimeStamp = work->input.ordinal.timestamp.peekll();
        mIsFirstFrame = false;
    }

@@ -388,7 +388,7 @@ FLAC__StreamEncoderWriteStatus C2SoftFlacEnc::onEncodedFlacAvailable(
    C2WriteView wView = mOutputBlock->map().get();
    uint8_t* outData = wView.data();
    const uint32_t sampleRate = mIntf->getSampleRate();
    const uint64_t outTimeStamp = mProcessedSamples * 1000000ll / sampleRate;
    const int64_t outTimeStamp = mProcessedSamples * 1000000ll / sampleRate;
    ALOGV("writing %zu bytes of encoded data on output", bytes);
    // increment mProcessedSamples to maintain audio synchronization during
    // play back
+1 −1
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ private:
    bool mSignalledOutputEos;
    uint32_t mBlockSize;
    bool mIsFirstFrame;
    uint64_t mAnchorTimeStamp;
    int64_t mAnchorTimeStamp;
    uint64_t mProcessedSamples;
    // should the data received by the callback be written to the output port
    bool mEncoderWriteData;