diff options
author | Glenn Kasten <gkasten@google.com> | 2011-02-18 15:42:25 -0800 |
---|---|---|
committer | Glenn Kasten <gkasten@google.com> | 2011-02-18 15:42:25 -0800 |
commit | 8c8f24dce1dfc2d1eed8f7856ffceaa349afa2a6 (patch) | |
tree | d682a1fe8dd3cfbf04ca9dda91fcd07e5e4addf9 /media/libstagefright/MediaExtractor.cpp | |
parent | 0e10ea4e9773fc9c6c391b5b391a95e29edf29e4 (diff) | |
download | frameworks_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.cpp | 17 |
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; |