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

Commit eaf85785 authored by Robert Shih's avatar Robert Shih
Browse files

DO NOT MERGE - SoftMP3: memset safely

Bug: 29422022
Change-Id: I70c9e33269d16bf8c163815706ac24e18e34fe97
parent 4ef51225
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -120,6 +120,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) {
@@ -300,16 +311,18 @@ void SoftMP3::onQueueFilled(OMX_U32 /* portIndex */) {
                    outHeader->nOffset = 0;
                    outHeader->nFilledLen = kPVMP3DecoderDelay * mNumChannels * sizeof(int16_t);

                    memset(outHeader->pBuffer, 0, outHeader->nFilledLen);
                    if (!memsetSafe(outHeader, 0, outHeader->nFilledLen)) {
                        return;
                    }
                }
                outHeader->nFlags = OMX_BUFFERFLAG_EOS;
                mSignalledOutputEos = true;
            } else {
                // 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;
                }

                if (inHeader) {
                    mConfig->inputBufferUsedLength = inHeader->nFilledLen;
+1 −0
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ private:

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

    DISALLOW_EVIL_CONSTRUCTORS(SoftMP3);
};