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

Commit f4ad14f1 authored by Robert Shih's avatar Robert Shih Committed by android-build-merger
Browse files

Merge \"DO NOT MERGE - SoftMP3: memset safely\" into klp-dev

am: 3242dcf6

Change-Id: I09c381c92c7efeacc95c611b2775d875a6202027
parents 74b10b83 3242dcf6
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -118,6 +118,17 @@ void SoftMP3::initDecoder() {
    mIsFirst = true;
}

void *SoftMP3::memsetSafe(OMX_BUFFERHEADERTYPE *outHeader, int c, size_t len) {
    if (len > outHeader->nAllocLen) {
        ALOGE("memset buffer too small: got %lu, expected %zu", outHeader->nAllocLen, len);
        android_errorWriteLog(0x534e4554, "29422022");
        notify(OMX_EventError, OMX_ErrorUndefined, OUTPUT_BUFFER_TOO_SMALL, NULL);
        mSignalledError = true;
        return NULL;
    }
    return memset(outHeader->pBuffer, c, len);
}

OMX_ERRORTYPE SoftMP3::internalGetParameter(
        OMX_INDEXTYPE index, OMX_PTR params) {
    switch (index) {
@@ -245,7 +256,9 @@ void SoftMP3::onQueueFilled(OMX_U32 portIndex) {
                outHeader->nFilledLen =
                    kPVMP3DecoderDelay * mNumChannels * sizeof(int16_t);

                memset(outHeader->pBuffer, 0, outHeader->nFilledLen);
                if (!memsetSafe(outHeader, 0, outHeader->nFilledLen)) {
                    return;
                }
            } else {
                // Since we never discarded frames from the start, we won't have
                // to add any padding at the end either.
@@ -305,9 +318,9 @@ void SoftMP3::onQueueFilled(OMX_U32 portIndex) {

            // This is recoverable, just ignore the current frame and
            // play silence instead.
            memset(outHeader->pBuffer,
                   0,
                   mConfig->outputFrameSize * sizeof(int16_t));
            if (!memsetSafe(outHeader, 0, mConfig->outputFrameSize * sizeof(int16_t))) {
                return;
            }

            mConfig->inputBufferUsedLength = inHeader->nFilledLen;
        } else if (mConfig->samplingRate != mSamplingRate
+1 −0
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ private:

    void initPorts();
    void initDecoder();
    void *memsetSafe(OMX_BUFFERHEADERTYPE *outHeader, int c, size_t len);

    DISALLOW_EVIL_CONSTRUCTORS(SoftMP3);
};