From d3fe20cc64873472ef9c00e186d16a5884d9e453 Mon Sep 17 00:00:00 2001 From: aquilescanta Date: Mon, 24 Apr 2017 12:02:36 -0700 Subject: [PATCH] Check the type of the (non-initial) loaded HLS playlist This prevents illegal casts. Issue:#2702 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=154078240 --- .../playlist/HlsMediaPlaylistParserTest.java | 1 - .../source/hls/playlist/HlsMasterPlaylist.java | 2 +- .../source/hls/playlist/HlsMediaPlaylist.java | 2 +- .../source/hls/playlist/HlsPlaylist.java | 17 +---------------- .../source/hls/playlist/HlsPlaylistTracker.java | 12 +++++++++--- 5 files changed, 12 insertions(+), 22 deletions(-) diff --git a/library/hls/src/androidTest/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylistParserTest.java b/library/hls/src/androidTest/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylistParserTest.java index 3d976353cc..e2eb173df8 100644 --- a/library/hls/src/androidTest/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylistParserTest.java +++ b/library/hls/src/androidTest/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylistParserTest.java @@ -70,7 +70,6 @@ public class HlsMediaPlaylistParserTest extends TestCase { try { HlsPlaylist playlist = new HlsPlaylistParser().parse(playlistUri, inputStream); assertNotNull(playlist); - assertEquals(HlsPlaylist.TYPE_MEDIA, playlist.type); HlsMediaPlaylist mediaPlaylist = (HlsMediaPlaylist) playlist; assertEquals(HlsMediaPlaylist.PLAYLIST_TYPE_VOD, mediaPlaylist.playlistType); diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java index bd0a2db316..5a8c63f609 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMasterPlaylist.java @@ -55,7 +55,7 @@ public final class HlsMasterPlaylist extends HlsPlaylist { public HlsMasterPlaylist(String baseUri, List variants, List audios, List subtitles, Format muxedAudioFormat, List muxedCaptionFormats) { - super(baseUri, HlsPlaylist.TYPE_MASTER); + super(baseUri); this.variants = Collections.unmodifiableList(variants); this.audios = Collections.unmodifiableList(audios); this.subtitles = Collections.unmodifiableList(subtitles); diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist.java index 6b6e15e915..c7708a1d2f 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsMediaPlaylist.java @@ -97,7 +97,7 @@ public final class HlsMediaPlaylist extends HlsPlaylist { long startTimeUs, boolean hasDiscontinuitySequence, int discontinuitySequence, int mediaSequence, int version, long targetDurationUs, boolean hasEndTag, boolean hasProgramDateTime, Segment initializationSegment, List segments) { - super(baseUri, HlsPlaylist.TYPE_MEDIA); + super(baseUri); this.playlistType = playlistType; this.startTimeUs = startTimeUs; this.hasDiscontinuitySequence = hasDiscontinuitySequence; diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylist.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylist.java index aecd2fb324..7c3d64d701 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylist.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylist.java @@ -15,30 +15,15 @@ */ package com.google.android.exoplayer2.source.hls.playlist; -import android.support.annotation.IntDef; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - /** * Represents an HLS playlist. */ public abstract class HlsPlaylist { - /** - * The type of playlist. - */ - @Retention(RetentionPolicy.SOURCE) - @IntDef({TYPE_MASTER, TYPE_MEDIA}) - public @interface Type {} - public static final int TYPE_MASTER = 0; - public static final int TYPE_MEDIA = 1; - public final String baseUri; - @Type public final int type; - protected HlsPlaylist(String baseUri, @Type int type) { + protected HlsPlaylist(String baseUri) { this.baseUri = baseUri; - this.type = type; } } diff --git a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker.java b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker.java index 311f279b96..02a8e3f098 100644 --- a/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker.java +++ b/library/hls/src/main/java/com/google/android/exoplayer2/source/hls/playlist/HlsPlaylistTracker.java @@ -477,9 +477,15 @@ public final class HlsPlaylistTracker implements Loader.Callback loadable, long elapsedRealtimeMs, long loadDurationMs) { - processLoadedPlaylist((HlsMediaPlaylist) loadable.getResult()); - eventDispatcher.loadCompleted(loadable.dataSpec, C.DATA_TYPE_MANIFEST, elapsedRealtimeMs, - loadDurationMs, loadable.bytesLoaded()); + HlsPlaylist result = loadable.getResult(); + if (result instanceof HlsMediaPlaylist) { + processLoadedPlaylist((HlsMediaPlaylist) result); + eventDispatcher.loadCompleted(loadable.dataSpec, C.DATA_TYPE_MANIFEST, elapsedRealtimeMs, + loadDurationMs, loadable.bytesLoaded()); + } else { + onLoadError(loadable, elapsedRealtimeMs, loadDurationMs, + new ParserException("Loaded playlist has unexpected type.")); + } } @Override