From patchwork Wed Feb 23 02:31:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiasheng Jiang X-Patchwork-Id: 34464 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6838:d078:0:0:0:0 with SMTP id x24csp427363nkx; Tue, 22 Feb 2022 18:32:19 -0800 (PST) X-Google-Smtp-Source: ABdhPJxtPkJByXl0NRSeNh0vaZvfr/8tWIhh3bYGBuOlj3/lBjadqSFDE65dHiLxvBSiKd+u5mxE X-Received: by 2002:a17:906:71cc:b0:6cf:73fe:84e5 with SMTP id i12-20020a17090671cc00b006cf73fe84e5mr20937348ejk.148.1645583539162; Tue, 22 Feb 2022 18:32:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1645583539; cv=none; d=google.com; s=arc-20160816; b=v/VLDbFgRNta2NEYnv8WaOyWy8YD1WIjUon3wEz+sByrNQEZB+6NYBgATsWWrhECb2 u5C+Xds2AdY4y2FpD4ZvXLt9pWi6T7FeGUhmwhkJFKx+7qSXBAtxUKsZkEcI7k7bAu06 QlAuw/DC/4C2L18BJzH8bYCQJicVLJRqUBSYem8GPwrTWN4Xzx0WbnonmGmILgK4Lhe+ k+7y5InVxeiZ/IrObWEkHdfXvcUBm1yxSyqzRM5Esw57D86R5J+qJImNjQeD2HQrcyWh 1QkAVN7s+ESFTytyKmZ3aBqYrKf/pu/AHEmxTMSzFfq6Jsd+kMjkcPBdtVyv9QupQ4R1 oGow== 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:message-id:date:to:from :delivered-to; bh=LO5D/T0Ll1zFoLtgwCAU7rhufUzHGpIWKSqA5OTaxZo=; b=homeIhF8pFcJyEUz2Mz3UbGGa6mzHCEkm8nwVWhlK78UVwA8RTiSS7z20aSdaHik7q FlqXq7fOCVNYyNMTgKuNpwT0eWgSidfqqE218uCCrjGY72JqziCnAoE6MQRH4UBdmrjB bBICiLNX2MQ4oj3cmiJtnj7IQgJcYjkTQokDTFCZ3ntTyt1w/FuS8nbb5VvUln3+bXr1 YuFXcZ0faHYx2z7P1bEaxUuEPAJgYGEdQGdpFDwKaOAnLT/dBhG++e7hZOIVx6iDoMrO V7lzaeNrKnOlEd/q9xfQGtuSbJct/C1g07aNY6JTrvGQz4rwAiiU+kVHhyO5RK/tygGg wSjQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ky10si11270426ejc.745.2022.02.22.18.32.18; Tue, 22 Feb 2022 18:32:19 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B70A968A2C4; Wed, 23 Feb 2022 04:32:13 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from cstnet.cn (smtp21.cstnet.cn [159.226.251.21]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A8F1068B1B3 for ; Wed, 23 Feb 2022 04:32:05 +0200 (EET) Received: from localhost.localdomain (unknown [124.16.138.126]) by APP-01 (Coremail) with SMTP id qwCowADHzfGgnBViIz9bAQ--.1541S2; Wed, 23 Feb 2022 10:32:01 +0800 (CST) From: Jiasheng Jiang To: ffmpeg-devel@ffmpeg.org, michael@niedermayer.cc Date: Wed, 23 Feb 2022 10:31:59 +0800 Message-Id: <20220223023159.2789586-1-jiasheng@iscas.ac.cn> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-CM-TRANSID: qwCowADHzfGgnBViIz9bAQ--.1541S2 X-Coremail-Antispam: 1UD129KBjvJXoW7tFy3Wr4rAr48ZryUtw1fJFb_yoW8Kw1xpa y7Cas5Jr97t3WSkFn7J34FqrWrW395J3W0g3y0qrW2yrnxu3s8G348KFyjg3Wv9r4Fqw40 vF1Y93W5CF18AFDanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUkK14x267AKxVWUJVW8JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26r4j6ryUM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4U JVWxJr1l84ACjcxK6I8E87Iv67AKxVW8Jr0_Cr1UM28EF7xvwVC2z280aVCY1x0267AKxV W8Jr0_Cr1UM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40Ex7xf McIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AKxVWUJVW8JwAm72CE4IkC6x0Yz7 v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7MxkIecxEwVAF wVW8JwCF04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14 v26r1j6r18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_Jrv_JF1lIxkG c2Ij64vIr41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI 0_Jr0_Gr1lIxAIcVCF04k26cxKx2IYs7xG6rWUJVWrZr1UMIIF0xvEx4A2jsIE14v26r1j 6r4UMIIF0xvEx4A2jsIEc7CjxVAFwI0_Jr0_GrUvcSsGvfC2KfnxnUUI43ZEXa7VUbYhF7 UUUUU== X-Originating-IP: [124.16.138.126] X-CM-SenderInfo: pmld2xxhqjqxpvfd2hldfou0/ Subject: [FFmpeg-devel] [PATCH v4] avformat/nutdec: Add check for avformat_new_stream 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: Jiasheng Jiang Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: YC3+RRVjf9vq As the potential failure of the memory allocation, the avformat_new_stream() could return NULL pointer. Therefore, it should be better to check it and return error if fails. Also, the caller, nut_read_header(), needs to deal with the return value of the decode_main_header() and return error if memory allocation fails. And 'time_base_count' has already checked and it will return AVERROR_INVALIDDATA if fails, which is different from ENOMEM. Fixes: 619d8e2e58 ("updating nut demuxer to latest spec no muxing yet no index yet no seeking yet libnuts crcs dont match mine (didnt investigate yet) samplerate is stored wrong by libnut (demuxer has a workaround) code is not clean or beautifull yet, but i thought its better to commit early before someone unneccesarily wastes his time duplicating the work demuxer split from muxer") Signed-off-by: Jiasheng Jiang --- Changelog: v1 -> v2 * Change 1. Add the error handling for ENOMEM from decode_main_header() in nut_read_header(). * Change 2. Check for the 'time_base_count'. v2 -> v3 * Change 1. Remove the check for 'time_base_count'. * Change 2. Change the av_free to av_freep. v3 -> v4 * Change 1. Remove the av_freep. --- libavformat/nutdec.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/libavformat/nutdec.c b/libavformat/nutdec.c index 0a8a700acf..f9ad2c0af1 100644 --- a/libavformat/nutdec.c +++ b/libavformat/nutdec.c @@ -351,8 +351,12 @@ static int decode_main_header(NUTContext *nut) ret = AVERROR(ENOMEM); goto fail; } - for (i = 0; i < stream_count; i++) - avformat_new_stream(s, NULL); + for (i = 0; i < stream_count; i++) { + if (!avformat_new_stream(s, NULL)) { + ret = AVERROR(ENOMEM); + goto fail; + } + } return 0; fail: @@ -800,19 +804,23 @@ static int nut_read_header(AVFormatContext *s) NUTContext *nut = s->priv_data; AVIOContext *bc = s->pb; int64_t pos; - int initialized_stream_count; + int initialized_stream_count, ret; nut->avf = s; /* main header */ pos = 0; + ret = 0; do { + if (ret == AVERROR(ENOMEM)) + return ret; + pos = find_startcode(bc, MAIN_STARTCODE, pos) + 1; if (pos < 0 + 1) { av_log(s, AV_LOG_ERROR, "No main startcode found.\n"); return AVERROR_INVALIDDATA; } - } while (decode_main_header(nut) < 0); + } while ((ret = decode_main_header(nut)) < 0); /* stream headers */ pos = 0;