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

Commit d84db30a authored by Robert Shih's avatar Robert Shih Committed by Gerrit - the friendly Code Review server
Browse files

SoftMP3: memset safely

Bug: 29422022
Change-Id: I70c9e33269d16bf8c163815706ac24e18e34fe97
(cherry picked from commit c2639afa)
parent c4419291
Loading
Loading
Loading
Loading
+18 −4
Original line number Diff line number Diff line
@@ -122,6 +122,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) {
@@ -315,7 +326,10 @@ 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;
@@ -327,9 +341,9 @@ void SoftMP3::onQueueFilled(OMX_U32 /* portIndex */) {
                // if mIsFirst is true as we may not have a valid
                // mConfig->samplingRate and mConfig->num_channels?
                ALOGV_IF(mIsFirst, "insufficient data for first frame, sending silence");
                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
@@ -75,6 +75,7 @@ private:

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

    DISALLOW_EVIL_CONSTRUCTORS(SoftMP3);
};