summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/MediaExtractor.cpp
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2011-02-18 15:42:25 -0800
committerGlenn Kasten <gkasten@google.com>2011-02-18 15:42:25 -0800
commit8c8f24dce1dfc2d1eed8f7856ffceaa349afa2a6 (patch)
treed682a1fe8dd3cfbf04ca9dda91fcd07e5e4addf9 /media/libstagefright/MediaExtractor.cpp
parent0e10ea4e9773fc9c6c391b5b391a95e29edf29e4 (diff)
downloadframeworks_av-8c8f24dce1dfc2d1eed8f7856ffceaa349afa2a6.zip
frameworks_av-8c8f24dce1dfc2d1eed8f7856ffceaa349afa2a6.tar.gz
frameworks_av-8c8f24dce1dfc2d1eed8f7856ffceaa349afa2a6.tar.bz2
Don't crash when parsing DRM MIME types
Change-Id: I414897c911a6588061ddbb5f05c574e78162dca9
Diffstat (limited to 'media/libstagefright/MediaExtractor.cpp')
-rw-r--r--media/libstagefright/MediaExtractor.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/media/libstagefright/MediaExtractor.cpp b/media/libstagefright/MediaExtractor.cpp
index dbd0829..d4651c4 100644
--- a/media/libstagefright/MediaExtractor.cpp
+++ b/media/libstagefright/MediaExtractor.cpp
@@ -67,12 +67,19 @@ sp<MediaExtractor> MediaExtractor::Create(
mime, confidence);
}
- if (!strncmp(mime, "drm", 3)) {
- const char *originalMime = strrchr(mime, '+') + 1;
-
- if (!strncmp(mime, "drm+es_based", 12)) {
+ // DRM MIME type syntax is "drm+type+original" where
+ // type is "es_based" or "container_based" and
+ // original is the content's cleartext MIME type
+ if (!strncmp(mime, "drm+", 4)) {
+ const char *originalMime = strchr(mime+4, '+');
+ if (originalMime == NULL) {
+ // second + not found
+ return NULL;
+ }
+ ++originalMime;
+ if (!strncmp(mime, "drm+es_based+", 13)) {
return new DRMExtractor(source, originalMime);
- } else if (!strncmp(mime, "drm+container_based", 19)) {
+ } else if (!strncmp(mime, "drm+container_based+", 20)) {
mime = originalMime;
} else {
return NULL;