From patchwork Sun Oct 22 23:46:06 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 5654 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.90 with SMTP id m26csp6161670jah; Sun, 22 Oct 2017 16:46:27 -0700 (PDT) X-Received: by 10.223.164.135 with SMTP id g7mr1411777wrb.211.1508715987275; Sun, 22 Oct 2017 16:46:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1508715987; cv=none; d=google.com; s=arc-20160816; b=tQ39bf9JvZSHMJWaGGmMTGXWGWrA+V3nlVYu101kfuzCXFCb5r0PSVRTJQKabMNt/3 jMakulpDKsmK7cjP9Uiun7AWZjEJaBH6GlRbgFp/On6ixLOP328xBsCdF2RWYGJ6I9dg rGIDIpBqtPhisdKxlxyDDHV4OOFoY6lRNFbtGsl8i0DSLYWcUel8MgX2bUR3y8uIdo+D MamCqf7QFLj3IoMudcyN5ixhTruFcmDWAQ8/lyVoczawnOeWwiC1J9ie0htFS+GpT+iJ JldOsmxBT/5NVxHUDj+LRjXWWd8W1HjrEuwdkJy2QXV5c/38yYTLpb7McvKOlbEgrmmG UN0A== 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: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=NRZ5MdsqJSOSlBHbT2WbrangviMgIzckl1LL1bfRTQU=; b=CBRwo1UCpwL1AiIE2DNi7vsyoYm2iCJ4EXGuxIYfc21WO5/f+nCxzMZdMP+/p7QkPH 3xLiYYm24e/gJ3BJYTI+VYx7u7uTzSSy3soJHubDS8ZlBG2XwBiApJLrRPqx0wX2iBxe nEQEaIDedSqr0H5JID60nbbKHSCEUjKJIB607Iib6vNHijN7+7H1aFGmNYNVgWc9ZCyo DWwjzKg3E6uXmX/0Awvqxg947AotaDfrpvMIg0Hu1XTGcy4r00QDDLUO4txnoPQ1GTzL q7grn0RvPhWSLoYSqlGN9syi2WA9gamMaAG9Y31CNoGqJ8Mc02EDx3wJaQeNo6+9+nUW A3JA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=Nnj18w6L; 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=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id m130si2595851wmb.264.2017.10.22.16.46.26; Sun, 22 Oct 2017 16:46:27 -0700 (PDT) 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=@gmail.com header.s=20161025 header.b=Nnj18w6L; 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=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 655A6689E7A; Mon, 23 Oct 2017 02:46:18 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt0-f193.google.com (mail-qt0-f193.google.com [209.85.216.193]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0329468992F for ; Mon, 23 Oct 2017 02:46:12 +0300 (EEST) Received: by mail-qt0-f193.google.com with SMTP id z19so24201458qtg.11 for ; Sun, 22 Oct 2017 16:46:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=Ed+6WDWBYiDY5LtBf1eGS0CeMza4ZGF0E/ygA0KeHIo=; b=Nnj18w6LKfa+0lAmnEKuoi1lTcc5jYfh3ktvTcyspzZPlwymN8nr+ycQ8I2OpL4fYT oqDt60zPwIyCHEjmSjQUwVrleCHa85lDaKN3/uD+VebYryIUDSAZMhG6Vaaw4fLbhXZx krqHK4lPIcZ+EA62Bmn4Guj00P1hZx4fd99uzw4kq1P8rVWpCIDtlgutROMgE3K0fLlz IucsQaxOmFUCC+15MNhI06qgiGJFALCFkMMsBxXkU6cZyiXgkvaE2ju74oJ55lYS88AA vqflgz60dMR5yhvG0mA/n7FOOQHsKDdO211QBVqr3cpnhGD7OJfsvljaRPxaIVcxo//j Pk6w== 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; bh=Ed+6WDWBYiDY5LtBf1eGS0CeMza4ZGF0E/ygA0KeHIo=; b=rj60r0lvUde7rWLRVnMSs+Li7Vns4z/iSZNT/rYE/lLPDUj74Qox1M/jbkpdQ9utpb P4Mkm5XbIjk/V52FVR/MVrU/56vpfiLcMMHLJfXKbIvPy2zQPFCwGA9XqBlZvdMrl5w6 /f9P4hHka0nnsNIwCNWvBJbPyYd7zlRlf0dPsDGobGwa2WddewX3kWOsrgIX3VJaffbZ WeZsrBNqaPgHbrjL1WRkuSvc3lItm6X1ZTWNPCVJaDK+W5iNPauPDoqiaiJ+k9Q4HjXv lm0ekZPT/SqJZPcu/Zrj5XtkQKVKvGw/j2/LL1RtRmgx6Nszp/F6ktc1TSBFk6fmWWGW Wkqg== X-Gm-Message-State: AMCzsaXwJ9zChehqOnY3g70y3fEhv5ngBAJzrrRKfwQgN6jiu++485Z3 Wlpl6fbsaePIGD7Hs17MEtsZOw== X-Google-Smtp-Source: ABhQp+Tkw1+ShVbs6gD4ZODODkghk11mVsh4oxnUjAPQ2Yq74nAUgk2+5NldCBazZPdQcifimXUFcw== X-Received: by 10.200.25.46 with SMTP id t43mr17356043qtj.204.1508715977386; Sun, 22 Oct 2017 16:46:17 -0700 (PDT) Received: from localhost.localdomain ([181.231.59.220]) by smtp.gmail.com with ESMTPSA id k79sm3884383qke.28.2017.10.22.16.46.15 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 22 Oct 2017 16:46:16 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sun, 22 Oct 2017 20:46:06 -0300 Message-Id: <20171022234606.7204-1-jamrial@gmail.com> X-Mailer: git-send-email 2.14.2 Subject: [FFmpeg-devel] [PATCH] avcodec/tak: remove GetBitContext usage from avpriv_tak_parse_streaminfo() 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" This prevents potential ABI issues with GetBitContext. Signed-off-by: James Almer --- libavcodec/tak.c | 17 +++++++++++++++-- libavcodec/tak.h | 8 ++++++-- libavformat/takdec.c | 7 +++++-- 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/libavcodec/tak.c b/libavcodec/tak.c index d2670e00ff..8aa956b661 100644 --- a/libavcodec/tak.c +++ b/libavcodec/tak.c @@ -90,7 +90,7 @@ int ff_tak_check_crc(const uint8_t *buf, unsigned int buf_size) return 0; } -void avpriv_tak_parse_streaminfo(GetBitContext *gb, TAKStreamInfo *s) +void ff_tak_parse_streaminfo(TAKStreamInfo *s, GetBitContext *gb) { uint64_t channel_mask = 0; int frame_type, i; @@ -125,6 +125,19 @@ void avpriv_tak_parse_streaminfo(GetBitContext *gb, TAKStreamInfo *s) s->frame_samples = tak_get_nb_samples(s->sample_rate, frame_type); } +int avpriv_tak_parse_streaminfo(TAKStreamInfo *s, const uint8_t *buf, int size) +{ + GetBitContext gb; + int ret = init_get_bits8(&gb, buf, size); + + if (ret < 0) + return AVERROR_INVALIDDATA; + + ff_tak_parse_streaminfo(s, &gb); + + return 0; +} + int ff_tak_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, TAKStreamInfo *ti, int log_level_offset) { @@ -144,7 +157,7 @@ int ff_tak_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, } if (ti->flags & TAK_FRAME_FLAG_HAS_INFO) { - avpriv_tak_parse_streaminfo(gb, ti); + ff_tak_parse_streaminfo(ti, gb); if (get_bits(gb, 6)) skip_bits(gb, 25); diff --git a/libavcodec/tak.h b/libavcodec/tak.h index 4fa1239093..dc45a8c070 100644 --- a/libavcodec/tak.h +++ b/libavcodec/tak.h @@ -143,10 +143,14 @@ int ff_tak_check_crc(const uint8_t *buf, unsigned int buf_size); /** * Parse the Streaminfo metadata block. - * @param[in] gb pointer to GetBitContext * @param[out] s storage for parsed information + * @param[in] buf input buffer + * @param[in] size size of input buffer in bytes + * @return non-zero on error, 0 if OK */ -void avpriv_tak_parse_streaminfo(GetBitContext *gb, TAKStreamInfo *s); +int avpriv_tak_parse_streaminfo(TAKStreamInfo *s, const uint8_t *buf, int size); + +void ff_tak_parse_streaminfo(TAKStreamInfo *s, GetBitContext *gb); /** * Validate and decode a frame header. diff --git a/libavformat/takdec.c b/libavformat/takdec.c index 1535bec64f..6fda35c1be 100644 --- a/libavformat/takdec.c +++ b/libavformat/takdec.c @@ -103,7 +103,6 @@ static int tak_read_header(AVFormatContext *s) } } - init_get_bits8(&gb, buffer, size - 3); break; case TAK_METADATA_MD5: { uint8_t md5[16]; @@ -145,7 +144,9 @@ static int tak_read_header(AVFormatContext *s) if (type == TAK_METADATA_STREAMINFO) { TAKStreamInfo ti; - avpriv_tak_parse_streaminfo(&gb, &ti); + ret = avpriv_tak_parse_streaminfo(&ti, buffer, size -3); + if (ret < 0) + return AVERROR_INVALIDDATA; if (ti.samples > 0) st->duration = ti.samples; st->codecpar->bits_per_coded_sample = ti.bps; @@ -161,11 +162,13 @@ static int tak_read_header(AVFormatContext *s) } else if (type == TAK_METADATA_LAST_FRAME) { if (size != 11) return AVERROR_INVALIDDATA; + init_get_bits8(&gb, buffer, size - 3); tc->mlast_frame = 1; tc->data_end = get_bits64(&gb, TAK_LAST_FRAME_POS_BITS) + get_bits(&gb, TAK_LAST_FRAME_SIZE_BITS); av_freep(&buffer); } else if (type == TAK_METADATA_ENCODER) { + init_get_bits8(&gb, buffer, size - 3); av_log(s, AV_LOG_VERBOSE, "encoder version: %0X\n", get_bits_long(&gb, TAK_ENCODER_VERSION_BITS)); av_freep(&buffer);