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

Commit e2d0c79f authored by Chong Zhang's avatar Chong Zhang
Browse files

check error on setMediaCas

setMediaCas could fail even when the cas object is validated,
don't assume it always succeeds.

bug: 151006394

test: android.media.cts.MediaDrmClearkeyTest#testClearKeyPlaybackMpeg2ts
when the cfi check appears, mediaextractor will crash, and the
above test should show Fail result.

Change-Id: Ie4c04c5bd073e0000de893d16de466b36cb0fb86
parent 6b4d9a1f
Loading
Loading
Loading
Loading
+23 −6
Original line number Diff line number Diff line
@@ -94,11 +94,16 @@ status_t NuMediaExtractor::setDataSource(
        return ERROR_UNSUPPORTED;
    }

    status_t err = OK;
    if (!mCasToken.empty()) {
        mImpl->setMediaCas(mCasToken);
        err = mImpl->setMediaCas(mCasToken);
        if (err != OK) {
            ALOGE("%s: failed to setMediaCas (%d)", __FUNCTION__, err);
            return err;
        }
    }

    status_t err = updateDurationAndBitrate();
    err = updateDurationAndBitrate();
    if (err == OK) {
        mDataSource = dataSource;
    }
@@ -131,7 +136,11 @@ status_t NuMediaExtractor::setDataSource(int fd, off64_t offset, off64_t size) {
    }

    if (!mCasToken.empty()) {
        mImpl->setMediaCas(mCasToken);
        err = mImpl->setMediaCas(mCasToken);
        if (err != OK) {
            ALOGE("%s: failed to setMediaCas (%d)", __FUNCTION__, err);
            return err;
        }
    }

    err = updateDurationAndBitrate();
@@ -161,7 +170,11 @@ status_t NuMediaExtractor::setDataSource(const sp<DataSource> &source) {
    }

    if (!mCasToken.empty()) {
        mImpl->setMediaCas(mCasToken);
        err = mImpl->setMediaCas(mCasToken);
        if (err != OK) {
            ALOGE("%s: failed to setMediaCas (%d)", __FUNCTION__, err);
            return err;
        }
    }

    err = updateDurationAndBitrate();
@@ -195,8 +208,12 @@ status_t NuMediaExtractor::setMediaCas(const HInterfaceToken &casToken) {
    mCasToken = casToken;

    if (mImpl != NULL) {
        mImpl->setMediaCas(casToken);
        status_t err = updateDurationAndBitrate();
        status_t err = mImpl->setMediaCas(casToken);
        if (err != OK) {
            ALOGE("%s: failed to setMediaCas (%d)", __FUNCTION__, err);
            return err;
        }
        err = updateDurationAndBitrate();
        if (err != OK) {
            return err;
        }