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

Commit 612e1619 authored by Andreas Huber's avatar Andreas Huber
Browse files

Stop metadata retriever from dereferencing a NULL pointer if

the media extractor failed to initialize (malformed or unsupported content)

Change-Id: Icfad4e9eeb8d6713ad12eee7979ab30b696c06e0
related-to-bug: 5263840
parent f12abaf4
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -283,8 +283,15 @@ VideoFrame *StagefrightMetadataRetriever::getFrameAtTime(
        return NULL;
    }

    sp<MetaData> fileMeta = mExtractor->getMetaData();

    if (fileMeta == NULL) {
        LOGV("extractor doesn't publish metadata, failed to initialize?");
        return NULL;
    }

    int32_t drm = 0;
    if (mExtractor->getMetaData()->findInt32(kKeyIsDRM, &drm) && drm != 0) {
    if (fileMeta->findInt32(kKeyIsDRM, &drm) && drm != 0) {
        LOGE("frame grab not allowed.");
        return NULL;
    }
@@ -320,7 +327,7 @@ VideoFrame *StagefrightMetadataRetriever::getFrameAtTime(
    const void *data;
    uint32_t type;
    size_t dataSize;
    if (mExtractor->getMetaData()->findData(kKeyAlbumArt, &type, &data, &dataSize)
    if (fileMeta->findData(kKeyAlbumArt, &type, &data, &dataSize)
            && mAlbumArt == NULL) {
        mAlbumArt = new MediaAlbumArt;
        mAlbumArt->mSize = dataSize;
@@ -387,6 +394,11 @@ const char *StagefrightMetadataRetriever::extractMetadata(int keyCode) {
void StagefrightMetadataRetriever::parseMetaData() {
    sp<MetaData> meta = mExtractor->getMetaData();

    if (meta == NULL) {
        LOGV("extractor doesn't publish metadata, failed to initialize?");
        return;
    }

    struct Map {
        int from;
        int to;