From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by master.gitmailbox.com (Postfix) with ESMTPS id 6C516406F3 for ; Wed, 22 Dec 2021 15:13:54 +0000 (UTC) Received: by mail-pl1-f169.google.com with SMTP id c7so2105377plg.5 for ; Wed, 22 Dec 2021 07:13:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=XnlBONdcLwghEWYVPcUbZxOCsoWR2ycNcciDCbkamZ4=; b=KiHjJl9+OsxON6fKHeWMnLi0cQ1DipZ7WlT8dYclg68AaLvZXskihnLEKX/Uq1mYbC GZjZU/6Lvb7y0lwBFx5r3pq3TwmBCt8NHX8jC9lmlr+rafUVu5GlCbdUTiBe/4trmO/j QjhNSmOwvnWxv2q9mCeIzG/gqpIJVscOgqY89yRZTmBUqy2rE7IOa2hGOI8eRXhf0w/V gqIgo+PxLH633d5Ss6ICLySI9H0sdqPqxYnEvTDqayC2vs2RjP56QuVhGwD4Yf2Ppcum QlGGIzy3JxGLJPnp2jXA+qZqY5NCuoYmx/czm67/FpLaY+Pmvqus9x4j80dFy3JA9GIy Vnog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=XnlBONdcLwghEWYVPcUbZxOCsoWR2ycNcciDCbkamZ4=; b=tna/xF09EmmtYHGFD8TlzuA4TwHG8j3ruYgDLKysYzms8OpSt2ok+Hl6ohgQGl4HwF zqP968c2oy/9eWWxraHceFv8I8sGnsr/yCViKr1LD7+scaHixixRvHtLzi0KRBjAWA+q fbcQ/mZBGqEkfuz+vINDEbOD39RLwYSexzzkId+1OWZ+9zwF/xTHUuplUyYkLeWtCOnw oK7Cyu4CrTeqqf+e6jpyBPKMshrkD/pAwsNS4kZ9Sa3cai7Xb97uPIULS9slwiZTyFNr 4OpztOp0BIDFsgWscc3XHbCwr0ob4CJqVouyNjIrH6KJFQ23+XahYa2pNauMfKAR2wsr bQqA== X-Gm-Message-State: AOAM531NRybfg4Xo1nbbTrEQOkopBtfcG8D3gRX7gVM5HvZTcHIbPglq P8JLq39pu8XrXaGsYxG3o8hJqOPe7nrLYwQG X-Google-Smtp-Source: ABdhPJzv0wFW52GWSbYJL4pMrZ6TnXiWeEMp/Fc5b5isDcGNCKOjLYoz1wdkmgnrqfzsEEuifLy6Pg== X-Received: by 2002:a17:90a:3d41:: with SMTP id o1mr1812492pjf.215.1640186034203; Wed, 22 Dec 2021 07:13:54 -0800 (PST) Received: from [127.0.0.1] (master.gitmailbox.com. [34.83.118.50]) by smtp.gmail.com with ESMTPSA id n34sm2735360pfv.129.2021.12.22.07.13.53 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 22 Dec 2021 07:13:53 -0800 (PST) Message-Id: In-Reply-To: References: From: ffmpegagent Date: Wed, 22 Dec 2021 15:13:42 +0000 Subject: [PATCH 03/11] libavformat/asfdec: fix type of value_len Fcc: Sent Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MIME-Version: 1.0 To: ffmpegdev@gitmailbox.com Cc: softworkz , softworkz Archived-At: List-Archive: List-Post: From: softworkz The value_len is an uint32 not an int32 per spec. That value must not be truncated, neither by casting to int, nor by any conditional checks, because at the end of get_tag, this value is needed to move forward in parsing. When the len value gets modified, the parsing may break. Signed-off-by: softworkz --- libavformat/asfdec_f.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/libavformat/asfdec_f.c b/libavformat/asfdec_f.c index d31e1d581d..29b429fee9 100644 --- a/libavformat/asfdec_f.c +++ b/libavformat/asfdec_f.c @@ -218,7 +218,7 @@ static uint64_t get_value(AVIOContext *pb, int type, int type2_size) } } -static void get_tag(AVFormatContext *s, const char *key, int type, int len, int type2_size) +static void get_tag(AVFormatContext *s, const char *key, int type, uint32_t len, int type2_size) { ASFContext *asf = s->priv_data; char *value = NULL; @@ -528,7 +528,7 @@ static int asf_read_ext_stream_properties(AVFormatContext *s, int64_t size) static int asf_read_content_desc(AVFormatContext *s, int64_t size) { AVIOContext *pb = s->pb; - int len1, len2, len3, len4, len5; + uint32_t len1, len2, len3, len4, len5; len1 = avio_rl16(pb); len2 = avio_rl16(pb); @@ -614,25 +614,23 @@ static int asf_read_metadata(AVFormatContext *s, int64_t size) { AVIOContext *pb = s->pb; ASFContext *asf = s->priv_data; - int n, stream_num, name_len_utf16, name_len_utf8, value_len; + int n, name_len_utf8; + uint16_t stream_num, name_len_utf16, value_type; + uint32_t value_len; int ret, i; n = avio_rl16(pb); for (i = 0; i < n; i++) { uint8_t *name; - int value_type; avio_rl16(pb); // lang_list_index - stream_num = avio_rl16(pb); - name_len_utf16 = avio_rl16(pb); - value_type = avio_rl16(pb); /* value_type */ - value_len = avio_rl32(pb); + stream_num = (uint16_t)avio_rl16(pb); + name_len_utf16 = (uint16_t)avio_rl16(pb); + value_type = (uint16_t)avio_rl16(pb); /* value_type */ + value_len = avio_rl32(pb); - if (value_len < 0 || value_len > UINT16_MAX) - return AVERROR_INVALIDDATA; - - name_len_utf8 = 2*name_len_utf16 + 1; - name = av_malloc(name_len_utf8); + name_len_utf8 = 2 * name_len_utf16 + 1; + name = av_malloc(name_len_utf8); if (!name) return AVERROR(ENOMEM); -- gitgitgadget