From 65b24e46a1c2f26688458cf16a11733e96da0f22 Mon Sep 17 00:00:00 2001 From: Uoti Urpala Date: Tue, 17 Jul 2012 23:18:06 +0300 Subject: core: fix attempt to get audio pts without audio written_audio_pts() can be called even if no audio track is active (at least through get_current_time() when there's no known video PTS). This triggered a crash due to NULL dereference. Add a check to return MP_NOPTS_VALUE if no audio track exists. Also remove a questionable update_osd_msg() call from per-file initialization code. The call was at a point where an audio track might be selected but not properly initialized, possibly also causing a crash if update_osd_msg() queries current position. I don't see any reason why the call would have been needed; it should get called anyway before OSD contents are actually used for the new file. --- mplayer.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mplayer.c b/mplayer.c index 5a2e7be1b3..2a87de2c2c 100644 --- a/mplayer.c +++ b/mplayer.c @@ -1846,6 +1846,8 @@ init_error: static double written_audio_pts(struct MPContext *mpctx) { sh_audio_t *sh_audio = mpctx->sh_audio; + if (!sh_audio) + return MP_NOPTS_VALUE; demux_stream_t *d_audio = mpctx->d_audio; // first calculate the end pts of audio that has been output by decoder double a_pts = sh_audio->pts; @@ -4817,10 +4819,8 @@ goto_enable_cache: if (verbose) opts->term_osd = 0; - // Make sure old OSD does not stay around, - // e.g. with -fixed-vo and same-resolution files + // Make sure old OSD does not stay around clear_osd_msgs(); - update_osd_msg(mpctx); //================ SETUP AUDIO ========================== -- cgit v1.2.3