OSDN Git Service

MediaPlayer: fix use after free for mMediaTimeProvider
authorWei Jia <wjia@google.com>
Fri, 15 Mar 2019 18:34:15 +0000 (11:34 -0700)
committerWei Jia <wjia@google.com>
Fri, 15 Mar 2019 18:52:05 +0000 (11:52 -0700)
Test: cts
Bug: 128327073
Change-Id: I4c9a9e3bfe27d6ec3d533a4ef8c5706d32221eed

media/java/android/media/MediaPlayer.java
media/java/android/media/SubtitleTrack.java

index abbfa88..040152a 100644 (file)
@@ -2645,7 +2645,7 @@ public class MediaPlayer extends PlayerBase
      */
     private synchronized void setSubtitleAnchor() {
         if ((mSubtitleController == null) && (ActivityThread.currentApplication() != null)) {
-            getMediaTimeProvider();
+            final TimeProvider timeProvider = (TimeProvider) getMediaTimeProvider();
             final HandlerThread thread = new HandlerThread("SetSubtitleAnchorThread");
             thread.start();
             Handler handler = new Handler(thread.getLooper());
@@ -2653,7 +2653,8 @@ public class MediaPlayer extends PlayerBase
                 @Override
                 public void run() {
                     Context context = ActivityThread.currentApplication();
-                    mSubtitleController = new SubtitleController(context, mTimeProvider, MediaPlayer.this);
+                    mSubtitleController =
+                            new SubtitleController(context, timeProvider, MediaPlayer.this);
                     mSubtitleController.setAnchor(new Anchor() {
                         @Override
                         public void setSubtitleWidget(RenderingWidget subtitleWidget) {
@@ -2661,7 +2662,7 @@ public class MediaPlayer extends PlayerBase
 
                         @Override
                         public Looper getSubtitleLooper() {
-                            return mTimeProvider.mEventHandler.getLooper();
+                            return timeProvider.mEventHandler.getLooper();
                         }
                     });
                     thread.getLooper().quitSafely();
index 5596c32..0705d97 100644 (file)
@@ -263,7 +263,9 @@ public abstract class SubtitleTrack implements MediaTimeProvider.OnMediaTimeList
         }
         updateView(mActiveCues);
         mNextScheduledTimeMs = -1;
-        mTimeProvider.notifyAt(MediaTimeProvider.NO_TIME, this);
+        if (mTimeProvider != null) {
+            mTimeProvider.notifyAt(MediaTimeProvider.NO_TIME, this);
+        }
     }
 
     /** @hide */