Bug 1261900: [webm] P9. Prevent null deref when webm logs are turned on. r?kinetik draft
authorJean-Yves Avenard <jyavenard@mozilla.com>
Wed, 27 Apr 2016 10:07:03 +1000
changeset 356746 1031f2fe7259daa5cc99ccaf4ae3ebc3437ffab5
parent 356745 df7c45d44c2a5925f61f7d69e384ba78461025a8
child 356747 c754903c9187ce3ea56ba0917e2b1b0500b725aa
child 356817 0a471cbb2e14e9bb43eed63b984d5c7a3e76f8e4
push id16586
push userbmo:jyavenard@mozilla.com
push dateWed, 27 Apr 2016 02:47:40 +0000
reviewerskinetik
bugs1261900
milestone49.0a1
Bug 1261900: [webm] P9. Prevent null deref when webm logs are turned on. r?kinetik MozReview-Commit-ID: EHmYC8hPoIR
dom/media/webm/WebMDemuxer.cpp
--- a/dom/media/webm/WebMDemuxer.cpp
+++ b/dom/media/webm/WebMDemuxer.cpp
@@ -1040,30 +1040,32 @@ WebMTrackDemuxer::GetNextRandomAccessPoi
 }
 
 RefPtr<WebMTrackDemuxer::SkipAccessPointPromise>
 WebMTrackDemuxer::SkipToNextRandomAccessPoint(media::TimeUnit aTimeThreshold)
 {
   uint32_t parsed = 0;
   bool found = false;
   RefPtr<MediaRawData> sample;
+  int64_t sampleTime;
 
   WEBM_DEBUG("TimeThreshold: %f", aTimeThreshold.ToSeconds());
   while (!found && (sample = NextSample())) {
     parsed++;
-    if (sample->mKeyframe && sample->mTime >= aTimeThreshold.ToMicroseconds()) {
+    sampleTime = sample->mTime;
+    if (sample->mKeyframe && sampleTime >= aTimeThreshold.ToMicroseconds()) {
       found = true;
       mSamples.Reset();
       mSamples.PushFront(sample.forget());
     }
   }
   SetNextKeyFrameTime();
   if (found) {
     WEBM_DEBUG("next sample: %f (parsed: %d)",
-               media::TimeUnit::FromMicroseconds(sample->mTime).ToSeconds(),
+               media::TimeUnit::FromMicroseconds(sampleTime).ToSeconds(),
                parsed);
     return SkipAccessPointPromise::CreateAndResolve(parsed, __func__);
   } else {
     SkipFailureHolder failure(DemuxerFailureReason::END_OF_STREAM, parsed);
     return SkipAccessPointPromise::CreateAndReject(Move(failure), __func__);
   }
 }