summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLajos Molnar <lajos@google.com>2014-04-02 07:35:29 -0700
committerLajos Molnar <lajos@google.com>2014-04-04 19:05:32 -0700
commitc51db0a6bfb71ea9c934fb7971cb5ae1f1cf03a0 (patch)
tree82b7ebba818ae83a363cd6ca692d69af5a2be235
parenta1df816c0677185534babba6ffc29970b048e52e (diff)
downloadframeworks_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.cpp18
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;