From patchwork Tue Dec 5 03:34:12 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "tiejun.peng" X-Patchwork-Id: 6549 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp5167822jah; Mon, 4 Dec 2017 19:35:03 -0800 (PST) X-Google-Smtp-Source: AGs4zMbsD0su3qq9YafUmm0VGv4XtDdU+zge/Gn8Bv30lIfn7RdNUCS4wpPM+UNel657VPg3vfkf X-Received: by 10.223.139.199 with SMTP id w7mr11207187wra.282.1512444903674; Mon, 04 Dec 2017 19:35:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1512444903; cv=none; d=google.com; s=arc-20160816; b=GhZOtXbSipBgGETZDgGa+xcn21pLzgdS+qJ5Zh/nbevb5rJrASnZwLZArUbIMHLWZS KPIfUroJdHEY8k4ZsO8X6O4qnAHQFKiv8BPCjKQaCnmi07kDiISVlj3k3yZXqOTkBrei +Hxts+/rvcNIUeSqt4fX/SZzXJH6HuR72dddUdYFJGhIftLb1HyS5UW4fOZRtzD6DC0v 6A0KXfUYs38jpbN5tgPfqG8hqPrPAGacp2Cg7gfCbLcrLcBPdUAFJPN3MhENpyoBUPZO Jg3AfxgJ7U7u0AoqL9YbnmiaHeZZRSASvD03tD7iV3u9SSrajQGm7l69qXTHTc5qwFpi JCwg== 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:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=FZmcWuBEHT4FaOQAzL1RqFpPZCFrmhf+KGYf/5Eg+f0=; b=ZPJARQRqotSGR8Y4t39a3ojrQP42Ee0D7E40Lr6yL6BHqIfBLTI06o4B51IRvFy6XE +UHVaHfwOKtytYYC0fZuYC08TeDkzOFumSwll6OTXax3hJa4DQgOC7MwTeFkqG6+Ugo6 P65m5A8hTwGReQd/fs1rsQBDcqOScyhMMCY7jZQ13itd61fLBlDhlvnIOliqZYc9w5j0 EGRzi9Y2nBvI2ji6X/HGe6yoMwx6MvdLo5sxxSDO65OjOcAosGBQLm7AWkn2Yyx0czpk Ml0N4fCpiX3JJVvP94usuv9csRoZXx6RgbWR333barfy6hDgIbZzGQvL7zxZd+nP9Jqi Aytg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@foxmail.com header.s=s201512 header.b=OGC6v6Z1; 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 195si6145312wmi.59.2017.12.04.19.35.02; Mon, 04 Dec 2017 19:35:03 -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=OGC6v6Z1; 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 64BE468A069; Tue, 5 Dec 2017 05:34:56 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from smtpbg303.qq.com (smtpbg303.qq.com [184.105.206.26]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 48A6E680287 for ; Tue, 5 Dec 2017 05:34:49 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foxmail.com; s=s201512; t=1512444891; bh=J8Q6UE+lS6o6pRumXjU6L3GM/uVh4ITOVReqyDhYaL0=; h=From:To:Cc:Subject:Date:Message-Id; b=OGC6v6Z1t6x5hdO6qTsUr8yP8vcClSXzJikYmCW19oG8dnwy0vIRb2YQ/mIsZEot1 ipID5v/C07rEm1kywWW0/DLt5i3mm1RKCffGswhkrv63KkRzu9jeKK9Su2aCIFplyu Vw/0OH+CDmg6RGkspz6WIQ6+HI8C+I54gSpAOi7k= X-QQ-mid: esmtp12t1512444887tkuf7u6zw Received: from localhost.localdomain (unknown [203.160.89.93]) by esmtp4.qq.com (ESMTP) with id ; Tue, 05 Dec 2017 11:34:17 +0800 (CST) X-QQ-SSF: C100000000000020F3100500000000T X-QQ-FEAT: uLC2yWZT8bF8umy9d/XLH+j96Z6cBvM5Ch/I7XYOm55qHsrKQJxWAkrUodlJJ aQd5hWGLXY2bhl2OBCTDTy3oW1Zf988meooSGk1z3reRXcZXELvWIvbhYMkHxabFb70PwOf nRZnQebWuX0lc9H/Iq8bkoIN1a/ilN9LZbZO8NVMgFLHjrkHkppjxLhnhOWa6mgPuRxzTUj V7wS9LTXJGoSpGUAqWvd9b+cWhscxYthPebCJeRKlP4L9F1xg1xIcRO62facrProwLDvLlu tD+Fqgn+pJIEL8 X-QQ-GoodBg: 0 From: "tiejun.peng" To: ffmpeg-devel@ffmpeg.org Date: Tue, 5 Dec 2017 11:34:12 +0800 Message-Id: <1512444852-3209-1-git-send-email-tiejun.peng@foxmail.com> X-Mailer: git-send-email 2.7.4 X-QQ-SENDSIZE: 520 X-QQ-FName: 4E914886E84A4DD7BC8B3815BF355138 X-QQ-LocalIP: 10.208.130.95 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" 1.add warning info about corrupted atom box parsing. 2.atom box parsing return eof cause mov_read_close called in mov_read_header and user have no chance to play the file. Signed-off-by: tiejun.peng --- libavformat/mov.c | 46 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/libavformat/mov.c b/libavformat/mov.c index c901859..ef8b357 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; @@ -6609,7 +6632,8 @@ static int mov_read_header(AVFormatContext *s) do { if (mov->moov_retry) avio_seek(pb, 0, SEEK_SET); - if ((err = mov_read_default(mov, pb, atom)) < 0) { + /* EOF don't mean the file to play fail*/ + if ((err = mov_read_default(mov, pb, atom) && err != AVERROR_EOF) < 0) { av_log(s, AV_LOG_ERROR, "error reading header\n"); mov_read_close(s); return err;