summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/matroska
diff options
context:
space:
mode:
authorSteve Kondik <shade@chemlab.org>2016-02-29 17:32:19 -0800
committerKeith Mok <kmok@cyngn.com>2016-03-01 09:11:15 -0800
commit808632f7bf0a897fb55cc38170ad6c1b2fd86ba2 (patch)
treef40a0fdab15259e17b769aa59788ec5fdccec0ce /media/libstagefright/matroska
parentc5fa90a809c9e7a98e32373a4dea6b3e46a0e92c (diff)
downloadframeworks_av-808632f7bf0a897fb55cc38170ad6c1b2fd86ba2.zip
frameworks_av-808632f7bf0a897fb55cc38170ad6c1b2fd86ba2.tar.gz
frameworks_av-808632f7bf0a897fb55cc38170ad6c1b2fd86ba2.tar.bz2
stagefright: Don't crash on invalid / null AVCC atoms in MKV
* Seen in the wild. If a file contains an invalid track, skip it. * Also correct AVCC atom size check in Matroska extractor. REF: CYNGNOS-2168 Change-Id: I589aadbd689c9a00e1dca613e61fcec5b06ed69a
Diffstat (limited to 'media/libstagefright/matroska')
-rw-r--r--media/libstagefright/matroska/MatroskaExtractor.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/media/libstagefright/matroska/MatroskaExtractor.cpp b/media/libstagefright/matroska/MatroskaExtractor.cpp
index c1fa240..b2463e7 100644
--- a/media/libstagefright/matroska/MatroskaExtractor.cpp
+++ b/media/libstagefright/matroska/MatroskaExtractor.cpp
@@ -224,18 +224,19 @@ MatroskaSource::MatroskaSource(
mIsAudio = !strncasecmp("audio/", mime, 6);
if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_AVC)) {
- mType = AVC;
-
uint32_t dummy;
const uint8_t *avcc;
size_t avccSize;
CHECK(meta->findData(
kKeyAVCC, &dummy, (const void **)&avcc, &avccSize));
- CHECK_GE(avccSize, 5u);
-
- mNALSizeLen = 1 + (avcc[4] & 3);
- ALOGV("mNALSizeLen = %zu", mNALSizeLen);
+ if (avccSize < 7) {
+ ALOGW("Invalid AVCC atom in track, size %zu", avccSize);
+ } else {
+ mNALSizeLen = 1 + (avcc[4] & 3);
+ ALOGV("mNALSizeLen = %zu", mNALSizeLen);
+ mType = AVC;
+ }
} else if (!strcasecmp(mime, MEDIA_MIMETYPE_VIDEO_HEVC)) {
mType = HEVC;