diff options
| author | 2011-07-20 08:05:06 -0700 | |
|---|---|---|
| committer | 2011-07-20 08:05:06 -0700 | |
| commit | 85111ee50108e66254c6edbda76c7ed9676dc536 (patch) | |
| tree | c06ddf2b685882dea3e65e80172faf3fa6b68f0e | |
| parent | e8c3986b5c9377b0992bc77680954cb1b9f7f49b (diff) | |
| parent | 80d9064a14b4172d18edd3a5a70e6c2459b59eb7 (diff) | |
Merge "Content found in the wild violated the MPEG4 systems specs"
| -rw-r--r-- | media/libstagefright/ESDS.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/media/libstagefright/ESDS.cpp b/media/libstagefright/ESDS.cpp index b7c8e0c967c7..1f7ee252eb45 100644 --- a/media/libstagefright/ESDS.cpp +++ b/media/libstagefright/ESDS.cpp @@ -14,6 +14,10 @@ * limitations under the License. */ +//#define LOG_NDEBUG 0 +#define LOG_TAG "ESDS" +#include <utils/Log.h> + #include "include/ESDS.h" #include <string.h> @@ -87,6 +91,8 @@ status_t ESDS::skipDescriptorHeader( } while (more); + LOGV("tag=0x%02x data_size=%d", *tag, *data_size); + if (*data_size > size) { return ERROR_MALFORMED; } @@ -146,8 +152,20 @@ status_t ESDS::parseESDescriptor(size_t offset, size_t size) { if (OCRstreamFlag) { offset += 2; size -= 2; + + if ((offset >= size || mData[offset] != kTag_DecoderConfigDescriptor) + && offset - 2 < size + && mData[offset - 2] == kTag_DecoderConfigDescriptor) { + // Content found "in the wild" had OCRstreamFlag set but was + // missing OCR_ES_Id, the decoder config descriptor immediately + // followed instead. + offset -= 2; + size += 2; + + LOGW("Found malformed 'esds' atom, ignoring missing OCR_ES_Id."); + } } - + if (offset >= size) { return ERROR_MALFORMED; } |