From patchwork Wed Dec 8 02:35:07 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yy X-Patchwork-Id: 32170 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp7127013iog; Tue, 7 Dec 2021 18:35:26 -0800 (PST) X-Google-Smtp-Source: ABdhPJyiXBp76yB/f6SENQtk+9cgHdiB4HdO+uQ+mTUtYyDpiHDXsJxAr2FUCgwZeaoLy7x5ysYL X-Received: by 2002:a17:906:7315:: with SMTP id di21mr706088ejc.193.1638930925962; Tue, 07 Dec 2021 18:35:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1638930925; cv=none; d=google.com; s=arc-20160816; b=SM2q7rN/CvlLpV9zxOVcm5TO2FpvA4ew+50PJydkTzJffAkMAOVJI5FrKuv/P3WMJG tGAYWQG+Ro+ZyvK05e91ytYiooj6PFp38AHEuzqmUlpg0WkWyt13+PtEPP1nUPDSdlMT ojsIEDtK8lNfPBFfmZk/HtFoPzTP+UPNdGS6N+iqvcbFsN+DHoUcvhagEnNghTQ1H4al bbwSKjsbYM2BA0VN+aXwEuDzgddgs5kLNzbW5fGUAtjJmnLn5VWiOwi39YzHiClJ2Xt5 QwawJi1DJg2pa+RYyzH+CJNefoOTB3BRHEPrh6L+QdCEP8sTugHNPjbjEL+BnK8xfKwX x5Dg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=vBd4bWXk12FRV9haHOrp5cUSBjJOd3+v0mHO+BQWW7s=; b=RdwreBjx/0179+oKVIzEYI/Oor2XmBlv2bvwKNb4Y++WzFTGOKHsy5HuL2pMZIR+TU PSO86891Jyy9iKtb/TbJXiBUwiERKrxGphdox89f9x6vtRflCgX8VOJ7rB3efT5owwo4 ZHl4MOTNXlklPFSMDq3ogxsoN+a/gd44GbNcN1gxovxB/wc2B6uIZ0QsVAxoFIdJkKSn B7JujxLDOnSU2PCvJrySYzrFVKsNNMc3EvaqsHmFlPFiCkvPnF1pbiUNRXNBhMnTI0qy xoUjC43D0vxotAFC7CWR299/Gyv1GwaTektdGtoV2ZMJvHTJRoI11beZ8HFAVMvdC7W7 sxaA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@163.com header.s=s110527 header.b=PC28pLrw; 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=163.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l26si2071555eds.631.2021.12.07.18.35.25; Tue, 07 Dec 2021 18:35:25 -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=@163.com header.s=s110527 header.b=PC28pLrw; 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=163.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C73EA68A98A; Wed, 8 Dec 2021 04:35:20 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from m12-11.163.com (m12-11.163.com [220.181.12.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6259E6802A5 for ; Wed, 8 Dec 2021 04:35:12 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=From:Subject:Date:Message-Id:MIME-Version; bh=RD1+j YrbN2JxH23P2v9ZqmFhLPNtJz5a/YERI+n+FX8=; b=PC28pLrwuQRSBKknVeQlr ZdzupEC4Ijn6YKIJ6Bcw5qK7STi4OXevmXMNR6IRMeQErqFsPS3AR3xcG4uQ2tIt P/Lc4VGjRbD9/9pdK0gtTL6mU7u2hpeW7QqxQW8uwd46g6bhp1Cp/GqOMeu07I0g 0OC7d4Ac2JzS3JSN14MnH0= Received: from localhost.localdomain (unknown [103.107.216.232]) by smtp7 (Coremail) with SMTP id C8CowABHNDXcGbBhd9gbJQ--.5606S2; Wed, 08 Dec 2021 10:35:09 +0800 (CST) From: Yu Yang To: ffmpeg-devel@ffmpeg.org Date: Wed, 8 Dec 2021 10:35:07 +0800 Message-Id: <20211208023507.26194-1-young_chelsea@163.com> X-Mailer: git-send-email 2.33.1 In-Reply-To: <20211203093357.65777-1-young_chelsea@163.com> References: <20211203093357.65777-1-young_chelsea@163.com> MIME-Version: 1.0 X-CM-TRANSID: C8CowABHNDXcGbBhd9gbJQ--.5606S2 X-Coremail-Antispam: 1Uf129KBjvJXoW7Zr13Gr13tFyUtr1xZF15XFb_yoW5JrWxpr WrZryxtFy7XF9xAF1kt3WYka4Fkr4xJ34YkrsYqw1UZw45JrnakFyjgF1FyF97GFW7X342 vws5WrykJ3W7ZFJanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDUYxBIdaVFxhVjvjDU0xZFpf9x0zKZX7hUUUUU= X-Originating-IP: [103.107.216.232] X-CM-SenderInfo: x1rx0wpbfkvzxvhdqiywtou0bp/1tbiExNjSmE13PtPhgAAsT Subject: [FFmpeg-devel] [PATCH v4] fftools/opts: Avoid crash when opts could not be allocated X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: TOTE Robot , Yu Yang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 06dJ5aQSWagK If 'opts' could not be allocated, exiting the program to avoid crash when release it. Before setup_find_stream_info_opts(), checking 'orig_nb_streams' is > 0. Reported-by: TOTE Robot Signed-off-by: Yu Yang --- fftools/cmdutils.c | 4 +--- fftools/cmdutils.h | 4 ++-- fftools/ffmpeg_opt.c | 5 +++-- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/fftools/cmdutils.c b/fftools/cmdutils.c index 3c8e5a82cd..4b977f16e5 100644 --- a/fftools/cmdutils.c +++ b/fftools/cmdutils.c @@ -2181,13 +2181,11 @@ AVDictionary **setup_find_stream_info_opts(AVFormatContext *s, int i; AVDictionary **opts; - if (!s->nb_streams) - return NULL; opts = av_calloc(s->nb_streams, sizeof(*opts)); if (!opts) { av_log(NULL, AV_LOG_ERROR, "Could not alloc memory for stream options.\n"); - return NULL; + exit_program(1); } for (i = 0; i < s->nb_streams; i++) opts[i] = filter_codec_opts(codec_opts, s->streams[i]->codecpar->codec_id, diff --git a/fftools/cmdutils.h b/fftools/cmdutils.h index 82cda208be..50eed9b13a 100644 --- a/fftools/cmdutils.h +++ b/fftools/cmdutils.h @@ -430,8 +430,8 @@ AVDictionary *filter_codec_opts(AVDictionary *opts, enum AVCodecID codec_id, * Each dictionary will contain the options from codec_opts which can * be applied to the corresponding stream codec context. * - * @return pointer to the created array of dictionaries, NULL if it - * cannot be created + * @return pointer to the created array of dictionaries. + * Calls exit() on failure. */ AVDictionary **setup_find_stream_info_opts(AVFormatContext *s, AVDictionary *codec_opts); diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index a703798586..aac40acb9f 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -1191,9 +1191,10 @@ static int open_input_file(OptionsContext *o, const char *filename) choose_decoder(o, ic, ic->streams[i]); if (find_stream_info) { - AVDictionary **opts = setup_find_stream_info_opts(ic, o->g->codec_opts); + AVDictionary **opts = NULL; int orig_nb_streams = ic->nb_streams; - + if (orig_nb_streams > 0) + opts = setup_find_stream_info_opts(ic, o->g->codec_opts); /* If not enough info to get the stream parameters, we decode the first frames to get it. (used in mpeg case for example) */ ret = avformat_find_stream_info(ic, opts);