summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorNick Kralevich <nnk@google.com>2015-04-10 01:18:23 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-04-10 01:18:23 +0000
commit98336a769a3a54070c73fa44d7d776a407b55458 (patch)
tree9c0e90b9f3cb78a732898e68436dacaeff25e6af /media
parentd36122b4f10beef6d9f78b5a9b37a5748ba41fa0 (diff)
parente3e82d54c51a3130badcd9e433fe808d965f15c2 (diff)
downloadframeworks_av-98336a769a3a54070c73fa44d7d776a407b55458.zip
frameworks_av-98336a769a3a54070c73fa44d7d776a407b55458.tar.gz
frameworks_av-98336a769a3a54070c73fa44d7d776a407b55458.tar.bz2
Merge "Fix multiple division-by-zero conditions in MPEG4 parsing"
Diffstat (limited to 'media')
-rw-r--r--media/libstagefright/MPEG4Extractor.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp
index c95283e..f7fa2b6 100644
--- a/media/libstagefright/MPEG4Extractor.cpp
+++ b/media/libstagefright/MPEG4Extractor.cpp
@@ -1208,7 +1208,7 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) {
duration = ntohl(duration32);
}
}
- if (duration != 0) {
+ if (duration != 0 && mLastTrack->timescale != 0) {
mLastTrack->meta->setInt64(
kKeyDuration, (duration * 1000000) / mLastTrack->timescale);
}
@@ -1822,7 +1822,7 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) {
}
duration = d32;
}
- if (duration != 0) {
+ if (duration != 0 && mHeaderTimescale != 0) {
mFileMetaData->setInt64(kKeyDuration, duration * 1000000 / mHeaderTimescale);
}
@@ -1871,7 +1871,7 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) {
return ERROR_MALFORMED;
}
- if (duration != 0) {
+ if (duration != 0 && mHeaderTimescale != 0) {
mFileMetaData->setInt64(kKeyDuration, duration * 1000000 / mHeaderTimescale);
}
@@ -2085,6 +2085,8 @@ status_t MPEG4Extractor::parseSegmentIndex(off64_t offset, size_t size) {
return ERROR_MALFORMED;
}
ALOGV("sidx refid/timescale: %d/%d", referenceId, timeScale);
+ if (timeScale == 0)
+ return ERROR_MALFORMED;
uint64_t earliestPresentationTime;
uint64_t firstOffset;