From patchwork Tue Nov 27 11:48:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul B Mahol X-Patchwork-Id: 11182 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 30E1944DCDC for ; Tue, 27 Nov 2018 13:48:35 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A09A768A2E5; Tue, 27 Nov 2018 13:48:35 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f67.google.com (mail-wm1-f67.google.com [209.85.128.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EC0A268A2B8 for ; Tue, 27 Nov 2018 13:48:28 +0200 (EET) Received: by mail-wm1-f67.google.com with SMTP id 79so1403501wmo.0 for ; Tue, 27 Nov 2018 03:48:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=SBgKoK1SwpK1zYPuGWhxNsLgKtDJcHFe7hmfWtuXNqY=; b=vY1YotcYs1A7/1MR923eO7/pCewzHmsO0JrAnPXYuwA2Ub/nZ6VhfNKK3oebDuzsBJ cftQRwNIfZlLQbYkwfNm6MRjn5SVq1r7hXmLo4H5GcC9p0O98NjH5XOvTuq+xyTcH5lz nc3JEYmu5RQ0QfQJ735fyGcYe9rD/6FUzO3XInZdtVO2rbObtXRp/Om9h4xReoAfrs62 KIAP64qgs0fqhOKeq2hRGT/9c3rXFhXfKxkgvsiZmzNwP7KnQhnFs6c7mvkoHbKdyRcI wDu1PlzJ7QLbq7iYGxpaQWs3e1KOV9XM3z+cVyd9+CBU2WR7paNmDUuAPPTBXJ9IlnWW k8MA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=SBgKoK1SwpK1zYPuGWhxNsLgKtDJcHFe7hmfWtuXNqY=; b=C1fgjKnvpZeTeL8RR1VAjVY3bJ9hv6F4L6JOAbcyCflnYiw+5lM9H5ecbtEmOlt6dL m1EvVrZ6pMsvIvwCY3DBK9uFSulS0pXx2Id8tANYFQRhNnkTjXUEQbAWh/3KS54QhLy+ vohAcldjOdmcrqzvVYD1q5ByREaQsCaAvMmhV3HrIMXAWlxRWkJvEthmAcWwhcgI6qGE tPE9kE0Mrm2nSJCn/7AN/lCy9Aew6fpj0ZFy7Nh6T/FghNp+C7PgoK9xNIksF+fvSEWv Huz0Ul4FQ7loZZ60jnj4HAjk/VOBLV0JtLx4zpW2ko1BERNLTOqaXOtGnznhjRunIMTj 6F1g== X-Gm-Message-State: AA+aEWbeM64nvVIRP2LjvzbJdTahfMq3/hEVT3/IKxIQHJFvesz0ba6O e8vn7xYVBHHmPlWQE+Fj/S8sRtXL X-Google-Smtp-Source: AJdET5dnYRV8o9+fpXV0zY/6hPlkLI3MDrN6GNINQeveaHN7UqdN6q9ntQGReGnVOVym1Yf8EOdL8A== X-Received: by 2002:a1c:770c:: with SMTP id t12mr27581559wmi.101.1543319313311; Tue, 27 Nov 2018 03:48:33 -0800 (PST) Received: from localhost.localdomain ([94.250.174.60]) by smtp.gmail.com with ESMTPSA id y81-v6sm3562931wmd.11.2018.11.27.03.48.32 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 27 Nov 2018 03:48:32 -0800 (PST) From: Paul B Mahol To: ffmpeg-devel@ffmpeg.org Date: Tue, 27 Nov 2018 12:48:24 +0100 Message-Id: <20181127114824.9526-1-onemda@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181125111815.29038-1-onemda@gmail.com> References: <20181125111815.29038-1-onemda@gmail.com> Subject: [FFmpeg-devel] [PATCH] avformat/ac3dec: always skip junk bytes before sync bytes 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Fixes #7278. Signed-off-by: Paul B Mahol --- libavcodec/ac3dec.c | 20 +++++++++++++++++--- libavformat/ac3dec.c | 2 +- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/libavcodec/ac3dec.c b/libavcodec/ac3dec.c index 43b22b7654..71419458fa 100644 --- a/libavcodec/ac3dec.c +++ b/libavcodec/ac3dec.c @@ -1467,7 +1467,7 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data, int buf_size, full_buf_size = avpkt->size; AC3DecodeContext *s = avctx->priv_data; int blk, ch, err, offset, ret; - int got_independent_frame = 0; + int skip = 0, got_independent_frame = 0; const uint8_t *channel_map; uint8_t extended_channel_map[EAC3_MAX_CHANNELS]; const SHORTFLOAT *output[AC3_MAX_CHANNELS]; @@ -1477,6 +1477,14 @@ static int ac3_decode_frame(AVCodecContext * avctx, void *data, s->superframe_size = 0; buf_size = full_buf_size; + while (buf_size > 2) { + if (AV_RB16(buf) != 0x770B && AV_RL16(buf) != 0x770B) { + buf += 1; + buf_size -= 1; + continue; + } + break; + } /* copy input buffer to decoder context to avoid reading past the end of the buffer, which can be caused by a damaged input stream. */ if (buf_size >= 2 && AV_RB16(buf) == 0x770B) { @@ -1637,6 +1645,11 @@ dependent_frame: AC3HeaderInfo hdr; int err; + if (buf_size - s->frame_size <= 16) { + skip = buf_size - s->frame_size; + goto skip; + } + if ((ret = init_get_bits8(&s->gbc, buf + s->frame_size, buf_size - s->frame_size)) < 0) return ret; @@ -1657,6 +1670,7 @@ dependent_frame: } } } +skip: frame->decode_error_flags = err ? FF_DECODE_ERROR_INVALID_BITSTREAM : 0; @@ -1796,9 +1810,9 @@ dependent_frame: *got_frame_ptr = 1; if (!s->superframe_size) - return FFMIN(full_buf_size, s->frame_size); + return FFMIN(full_buf_size, s->frame_size + skip); - return FFMIN(full_buf_size, s->superframe_size); + return FFMIN(full_buf_size, s->superframe_size + skip); } /** diff --git a/libavformat/ac3dec.c b/libavformat/ac3dec.c index 6f423ff7eb..2718061bdc 100644 --- a/libavformat/ac3dec.c +++ b/libavformat/ac3dec.c @@ -47,7 +47,7 @@ static int ac3_eac3_probe(AVProbeData *p, enum AVCodecID expected_codec_id) uint16_t frame_size; int i, ret; - if(!memcmp(buf2, "\x1\x10\0\0\0\0\0\0", 8)) { + if(!memcmp(buf2, "\x1\x10", 2)) { if (buf2 + 16 > end) break; buf2+=16;