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

Commit 43f0e8e9 authored by Andreas Huber's avatar Andreas Huber
Browse files

We no longer do sanity checks based on "hdlr" tags in .mp4 files. Pretty soon...

We no longer do sanity checks based on "hdlr" tags in .mp4 files. Pretty soon we'll play any bytestream that even vaguely resembles the spec...

Change-Id: I43e05404860d8856b8aa566cc9b256bb3fa57e6f
related-to-bug: 2483328
parent 74d48436
Loading
Loading
Loading
Loading
+0 −51
Original line number Diff line number Diff line
@@ -677,49 +677,6 @@ status_t MPEG4Extractor::parseChunk(off_t *offset, int depth) {
            break;
        }

        case FOURCC('h', 'd', 'l', 'r'):
        {
            uint8_t buffer[12];

            if (chunk_data_size < (ssize_t)sizeof(buffer)) {
                return ERROR_MALFORMED;
            }

            if (mDataSource->readAt(data_offset, buffer, sizeof(buffer))
                    < (ssize_t)sizeof(buffer)) {
                return ERROR_IO;
            }

            if (U32_AT(buffer) != 0) {
                // Should be version 0, flags 0.
                return ERROR_MALFORMED;
            }

            if (U32_AT(&buffer[4]) != 0) {
                // pre_defined should be 0 for an ISO 14496-12 compliant
                // file, if it's not try some heuristics seen in the field.
                // This has been added to support some so-called
                // "enhanced" podcasts.

                if (U32_AT(&buffer[4]) == FOURCC('d', 'h', 'l', 'r')) {
                    *offset += chunk_size;
                    break;
                }

                if (U32_AT(&buffer[4]) != FOURCC('m', 'h', 'l', 'r')) {
                    return ERROR_MALFORMED;
                }

                mHandlerType = U32_AT(&buffer[8]);
                *offset += chunk_size;
                break;
            }

            mHandlerType = U32_AT(&buffer[8]);
            *offset += chunk_size;
            break;
        }

        case FOURCC('s', 't', 's', 'd'):
        {
            if (chunk_data_size < 8) {
@@ -770,10 +727,6 @@ status_t MPEG4Extractor::parseChunk(off_t *offset, int depth) {
        case FOURCC('s', 'a', 'm', 'r'):
        case FOURCC('s', 'a', 'w', 'b'):
        {
            if (mHandlerType != FOURCC('s', 'o', 'u', 'n')) {
                return ERROR_MALFORMED;
            }

            uint8_t buffer[8 + 20];
            if (chunk_data_size < (ssize_t)sizeof(buffer)) {
                // Basic AudioSampleEntry size.
@@ -827,10 +780,6 @@ status_t MPEG4Extractor::parseChunk(off_t *offset, int depth) {
        {
            mHasVideo = true;

            if (mHandlerType != FOURCC('v', 'i', 'd', 'e')) {
                return ERROR_MALFORMED;
            }

            uint8_t buffer[78];
            if (chunk_data_size < (ssize_t)sizeof(buffer)) {
                // Basic VideoSampleEntry size.
+0 −1
Original line number Diff line number Diff line
@@ -59,7 +59,6 @@ private:

    sp<MetaData> mFileMetaData;

    uint32_t mHandlerType;
    Vector<uint32_t> mPath;

    status_t readMetaData();