diff options
author | Lajos Molnar <lajos@google.com> | 2014-04-02 07:35:29 -0700 |
---|---|---|
committer | Lajos Molnar <lajos@google.com> | 2014-04-04 19:05:32 -0700 |
commit | c51db0a6bfb71ea9c934fb7971cb5ae1f1cf03a0 (patch) | |
tree | 82b7ebba818ae83a363cd6ca692d69af5a2be235 | |
parent | a1df816c0677185534babba6ffc29970b048e52e (diff) | |
download | frameworks_av-c51db0a6bfb71ea9c934fb7971cb5ae1f1cf03a0.zip frameworks_av-c51db0a6bfb71ea9c934fb7971cb5ae1f1cf03a0.tar.gz frameworks_av-c51db0a6bfb71ea9c934fb7971cb5ae1f1cf03a0.tar.bz2 |
stagefright: handle corrupt matroska files gracefully
Bug: 13693438
Bug: 13744158
Change-Id: I557595b5b5d4a20934f79e00a622b06d13378223
-rw-r--r-- | media/libstagefright/matroska/MatroskaExtractor.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/media/libstagefright/matroska/MatroskaExtractor.cpp b/media/libstagefright/matroska/MatroskaExtractor.cpp index d4a7c7f..d7bec59 100644 --- a/media/libstagefright/matroska/MatroskaExtractor.cpp +++ b/media/libstagefright/matroska/MatroskaExtractor.cpp @@ -657,14 +657,22 @@ MatroskaExtractor::MatroskaExtractor(const sp<DataSource> &source) return; } + // from mkvparser::Segment::Load(), but stop at first cluster ret = mSegment->ParseHeaders(); - CHECK_EQ(ret, 0); - - long len; - ret = mSegment->LoadCluster(pos, len); - CHECK_EQ(ret, 0); + if (ret == 0) { + long len; + ret = mSegment->LoadCluster(pos, len); + if (ret >= 1) { + // no more clusters + ret = 0; + } + } else if (ret > 0) { + ret = mkvparser::E_BUFFER_NOT_FULL; + } if (ret < 0) { + ALOGW("Corrupt %s source: %s", mIsWebm ? "webm" : "matroska", + uriDebugString(mDataSource->getUri()).c_str()); delete mSegment; mSegment = NULL; return; |