From patchwork Wed Dec 6 08:25:33 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "tiejun.peng" X-Patchwork-Id: 6564 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp6677534jah; Wed, 6 Dec 2017 00:27:49 -0800 (PST) X-Google-Smtp-Source: AGs4zMYuXVXXzo+POpZrGHYhDg23SNDRda7Muk7Opn2nqZpGU5kMtfL8IOlXRTB8RblHxJzcHbxz X-Received: by 10.223.184.245 with SMTP id c50mr18282335wrg.268.1512548869449; Wed, 06 Dec 2017 00:27:49 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1512548869; cv=none; d=google.com; s=arc-20160816; b=H66JpWVtkYPDE+n5HNJpFJGdk0VykgjelIFZASyS2i66DWGM+ljwjfV3aF+aWvPYIW 4D/W4FTasj8pdlVpTauivuMdPDRmE8wPh0EN67FFSsIDJJUS2DWS8zk705zKNbBspMDg Vd9SyZuov/uIueiU2qziMDQSXqdqZ/Bh+y/AieZLth3lwbT0mGhbXnkhbhA8Behj2x0h CY8tmS3wg2V43eV27rQKhTscR7WX4ODX8pD/K7vK4yEi2KhvH/2qZXmFZbviXNvnn/WV qg3yLUPkZ+3g51fObjIl+XLf08PwLNo/ZDbQaV4ZhDY7Z0yzAQXDRimd0sceCXKGSg4C BZuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:feedback-id:message-id:date:to:from :dkim-signature:delivered-to:arc-authentication-results; bh=91HWGa1RiPkZTrIyyaUGS9xei+X+RRMYv9SPqBJpbC0=; b=o5GcUbfAcq6G+Jd84yfnu/FH7rxmwwlKt2BtGO1Z/aD6WIH5Y4sdw211vh3YAcA/9r zU3kYhJOopKcrPM9bxwLCcEUXv6XMb1b+b3UFMurhJ8n9BxinlHEspUNS1PsAA9/B2lG AAJGWpOBw6qVcUffKfMgxkatcSUY5AqanU66XS202f16PUo0aOXIoxjvrv16QFKEvDgH wY2DmheP6bKUmmX/kn2cVZJfEMJj7W21xJZBMfq11dZmcbkAfUFIZcNDWSG0EhvsH4mO J8VZmPP1KsOgHws1E3LXZP1jWPS4OV7IvalR8Cd9xudaeqGGWC7Rk3dmEeCO25SPQ9Tu LFCA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=v99PtB3/; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id b9si1292525wrf.514.2017.12.06.00.27.48; Wed, 06 Dec 2017 00:27:49 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=v99PtB3/; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=foxmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0340168A08F; Wed, 6 Dec 2017 10:27:42 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from smtpbgsg2.qq.com (smtpbgsg2.qq.com [54.254.200.128]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7397168980A for ; Wed, 6 Dec 2017 10:27:39 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1512548846; bh=qR0YAEJMlTbUiEEwFqAAFPqKI3LeE3ZdCeKD/4D651g=; h=From:To:Cc:Subject:Date:Message-Id; b=v99PtB3/9fI4CevUXucoqu1r6n1UnljB2cVIHTtX6Tlm4K3hUS+RAoit6iFazHGpd TgUjfTpPOUKsvGlQSFq9iPsccfHPJ9Hyjd0aM++nZN33zBDdDDdgNimspAQLIXTH5N fsgJXpN4Ve4kbmuzX6uAgl/hxFdA905sHLIEILLw= X-QQ-mid: esmtp28t1512548845tgwcu17vw Received: from localhost.localdomain (unknown [203.160.89.93]) by esmtp4.qq.com (ESMTP) with id ; Wed, 06 Dec 2017 16:25:42 +0800 (CST) X-QQ-SSF: C100000000000020F4100500000000T X-QQ-FEAT: Gf8h89u9tNwUjs21gaX8mtRtbW5mAzpMSRXy97/YaYFJZm8eQytj8qnKNEGzb sDcN0YepioPOtqbnj8ASskMYzh/DJbMoYj7MV8Dpsxqh5iO1iZCtCK7bvbehSLIS2WRz46s 7+jMaavdgfVhooK0UUJyRN41T7x9WeqBjp5KIMz6Y/vUHRkFxPkNmma6irQfonP6Fzx0DZz c9qXVrPSz6+THG5PU1yvF/gR2rHtf8GKUxKfXrRbwn07GHXgo7+tZl+/72cb18oB8341+I9 428cq1eGZMv/+t X-QQ-GoodBg: 0 From: "tiejun.peng" To: ffmpeg-devel@ffmpeg.org Date: Wed, 6 Dec 2017 16:25:33 +0800 Message-Id: <1512548733-537-1-git-send-email-tiejun.peng@foxmail.com> X-Mailer: git-send-email 2.7.4 X-QQ-SENDSIZE: 520 Feedback-ID: esmtp:foxmail.com:bgforeign:bgforeign1 X-QQ-Bgrelay: 1 Subject: [FFmpeg-devel] [PATCH] lavf/mov: atom box parsing return eof cause play fail X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: "tiejun.peng" MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" fix eof lead to play fail. Signed-off-by: tiejun.peng --- libavformat/mov.c | 59 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index c901859..870fdd6 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -1991,8 +1991,10 @@ static int mov_read_stco(MOVContext *c, AVIOContext *pb, MOVAtom atom) sc->chunk_count = i; - if (pb->eof_reached) + if (pb->eof_reached) { + av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STCO atom\n"); return AVERROR_EOF; + } return 0; } @@ -2522,8 +2524,10 @@ int ff_mov_read_stsd_entries(MOVContext *c, AVIOContext *pb, int entries) sc->stsd_count++; } - if (pb->eof_reached) + if (pb->eof_reached) { + av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSD atom\n"); return AVERROR_EOF; + } return 0; } @@ -2624,8 +2628,10 @@ static int mov_read_stsc(MOVContext *c, AVIOContext *pb, MOVAtom atom) sc->stsc_count = i; - if (pb->eof_reached) + if (pb->eof_reached) { + av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSC atom\n"); return AVERROR_EOF; + } return 0; } @@ -2676,8 +2682,10 @@ static int mov_read_stps(MOVContext *c, AVIOContext *pb, MOVAtom atom) sc->stps_count = i; - if (pb->eof_reached) + if (pb->eof_reached) { + av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STPS atom\n"); return AVERROR_EOF; + } return 0; } @@ -2723,8 +2731,10 @@ static int mov_read_stss(MOVContext *c, AVIOContext *pb, MOVAtom atom) sc->keyframe_count = i; - if (pb->eof_reached) + if (pb->eof_reached) { + av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSS atom\n"); return AVERROR_EOF; + } return 0; } @@ -2808,8 +2818,10 @@ static int mov_read_stsz(MOVContext *c, AVIOContext *pb, MOVAtom atom) av_free(buf); - if (pb->eof_reached) + if (pb->eof_reached) { + av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STSZ atom\n"); return AVERROR_EOF; + } return 0; } @@ -2870,8 +2882,10 @@ static int mov_read_stts(MOVContext *c, AVIOContext *pb, MOVAtom atom) sc->duration_for_fps += duration; sc->nb_frames_for_fps += total_sample_count; - if (pb->eof_reached) + if (pb->eof_reached) { + av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted STTS atom\n"); return AVERROR_EOF; + } st->nb_frames= total_sample_count; if (duration) @@ -2948,8 +2962,10 @@ static int mov_read_ctts(MOVContext *c, AVIOContext *pb, MOVAtom atom) sc->ctts_count = ctts_count; - if (pb->eof_reached) + if (pb->eof_reached) { + av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted CTTS atom\n"); return AVERROR_EOF; + } av_log(c->fc, AV_LOG_TRACE, "dts shift %d\n", sc->dts_shift); @@ -2995,7 +3011,12 @@ static int mov_read_sbgp(MOVContext *c, AVIOContext *pb, MOVAtom atom) sc->rap_group_count = i; - return pb->eof_reached ? AVERROR_EOF : 0; + if (pb->eof_reached) { + av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted SBGP atom\n"); + return AVERROR_EOF; + } + + return 0; } /** @@ -4720,8 +4741,10 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom) fix_frag_index_entries(&c->frag_index, next_frag_index, frag->track_id, entries); - if (pb->eof_reached) + if (pb->eof_reached) { + av_log(c->fc, AV_LOG_WARNING, "reached eof, corrupted TRUN atom\n"); return AVERROR_EOF; + } frag->implicit_offset = offset; @@ -6607,13 +6630,15 @@ static int mov_read_header(AVFormatContext *s) /* check MOV header */ do { - if (mov->moov_retry) - avio_seek(pb, 0, SEEK_SET); - if ((err = mov_read_default(mov, pb, atom)) < 0) { - av_log(s, AV_LOG_ERROR, "error reading header\n"); - mov_read_close(s); - return err; - } + if (mov->moov_retry) + avio_seek(pb, 0, SEEK_SET); + /* EOF don't mean the file to play fail*/ + err = mov_read_default(mov, pb, atom); + if (err < 0 && err != AVERROR_EOF) { + av_log(s, AV_LOG_ERROR, "error reading header\n"); + mov_read_close(s); + return err; + } } while ((pb->seekable & AVIO_SEEKABLE_NORMAL) && !mov->found_moov && !mov->moov_retry++); if (!mov->found_moov) { av_log(s, AV_LOG_ERROR, "moov atom not found\n");