diff options
author | Marco Nelissen <marcone@google.com> | 2015-08-20 11:29:58 -0700 |
---|---|---|
committer | Marco Nelissen <marcone@google.com> | 2015-08-20 11:29:58 -0700 |
commit | eb10ccbc9dcab8ec3ee22a1c2b2db4a673c6fdc2 (patch) | |
tree | ae30f2a2cb0aa4aac6be286d42f30d6d97b32c79 /media/libstagefright/MPEG4Extractor.cpp | |
parent | d7c205fe1f7cda2cdcb3062b548c0777402bab38 (diff) | |
parent | 8a064aa83ad590b61ddd84e678c59f0d1f68106c (diff) | |
download | frameworks_av-eb10ccbc9dcab8ec3ee22a1c2b2db4a673c6fdc2.zip frameworks_av-eb10ccbc9dcab8ec3ee22a1c2b2db4a673c6fdc2.tar.gz frameworks_av-eb10ccbc9dcab8ec3ee22a1c2b2db4a673c6fdc2.tar.bz2 |
resolved conflicts for merge of 8a064aa8 to klp-modular-dev
Change-Id: If031955c9edca657401831fbfa5a128f0b4c6d86
Diffstat (limited to 'media/libstagefright/MPEG4Extractor.cpp')
-rw-r--r-- | media/libstagefright/MPEG4Extractor.cpp | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp index d306acb..9366a51 100644 --- a/media/libstagefright/MPEG4Extractor.cpp +++ b/media/libstagefright/MPEG4Extractor.cpp @@ -369,7 +369,7 @@ MPEG4Extractor::~MPEG4Extractor() { SINF *sinf = mFirstSINF; while (sinf) { SINF *next = sinf->next; - delete sinf->IPMPData; + delete[] sinf->IPMPData; delete sinf; sinf = next; } @@ -686,7 +686,10 @@ status_t MPEG4Extractor::parseDrmSINF(off64_t *offset, off64_t data_offset) { return ERROR_MALFORMED; } sinf->len = dataLen - 3; - sinf->IPMPData = new char[sinf->len]; + sinf->IPMPData = new (std::nothrow) char[sinf->len]; + if (sinf->IPMPData == NULL) { + return ERROR_MALFORMED; + } data_offset += 2; if (mDataSource->readAt(data_offset, sinf->IPMPData, sinf->len) < sinf->len) { @@ -1081,7 +1084,10 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { return ERROR_MALFORMED; } - pssh.data = new uint8_t[pssh.datalen]; + pssh.data = new (std::nothrow) uint8_t[pssh.datalen]; + if (pssh.data == NULL) { + return ERROR_MALFORMED; + } ALOGV("allocated pssh @ %p", pssh.data); ssize_t requested = (ssize_t) pssh.datalen; if (mDataSource->readAt(data_offset + 24, pssh.data, requested) < requested) { @@ -1747,8 +1753,7 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) { if ((chunk_size > SIZE_MAX) || (SIZE_MAX - chunk_size <= size)) { return ERROR_MALFORMED; } - - uint8_t *buffer = new uint8_t[size + chunk_size]; + uint8_t *buffer = new (std::nothrow) uint8_t[size + chunk_size]; if (buffer == NULL) { return ERROR_MALFORMED; } @@ -2070,7 +2075,10 @@ status_t MPEG4Extractor::parseITunesMetaData(off64_t offset, size_t size) { return ERROR_MALFORMED; } - uint8_t *buffer = new uint8_t[size + 1]; + uint8_t *buffer = new (std::nothrow) uint8_t[size + 1]; + if (buffer == NULL) { + return ERROR_MALFORMED; + } if (mDataSource->readAt( offset, buffer, size) != (ssize_t)size) { delete[] buffer; @@ -2699,7 +2707,11 @@ status_t MPEG4Source::start(MetaData *params) { mGroup->add_buffer(new MediaBuffer(max_size)); - mSrcBuffer = new uint8_t[max_size]; + mSrcBuffer = new (std::nothrow) uint8_t[max_size]; + if (mSrcBuffer == NULL) { + // file probably specified a bad max size + return ERROR_MALFORMED; + } mStarted = true; |