From patchwork Fri Feb 26 08:37:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Guo, Yejun" X-Patchwork-Id: 26004 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 D80BC44AD1A for ; Fri, 26 Feb 2021 10:48:13 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C645268A78B; Fri, 26 Feb 2021 10:48:13 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A320368A78B for ; Fri, 26 Feb 2021 10:48:06 +0200 (EET) IronPort-SDR: X0qiaYDXrNNeQL73F70eIoUEfNspNKBS6npMscq9UTWOcXXRqMGYuK/qe0PpVwpsKzAV41hi5g pjV6blPMIJXQ== X-IronPort-AV: E=McAfee;i="6000,8403,9906"; a="185871504" X-IronPort-AV: E=Sophos;i="5.81,208,1610438400"; d="scan'208";a="185871504" Received: from orsmga008.jf.intel.com ([10.7.209.65]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Feb 2021 00:48:01 -0800 IronPort-SDR: 7nDsrWQV1GTrcnP6A/zLEGvq8yI3DA8y3cqz8yZdJ5c9WdHjJBPMrzMaIyKB9RXSQAFIFcVhpx CK+5pYe47mBg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,208,1610438400"; d="scan'208";a="404815085" Received: from yguo18-skl-u1604.sh.intel.com ([10.239.159.53]) by orsmga008.jf.intel.com with ESMTP; 26 Feb 2021 00:48:00 -0800 From: "Guo, Yejun" To: ffmpeg-devel@ffmpeg.org Date: Fri, 26 Feb 2021 16:37:26 +0800 Message-Id: <20210226083727.2042-4-yejun.guo@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20210226083727.2042-1-yejun.guo@intel.com> References: <20210226083727.2042-1-yejun.guo@intel.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH V3 4/5] libavformat/smoothstreamingenc.c: fix build warning for [-Wformat-truncation=] 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 Cc: yejun.guo@intel.com Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Part of the build message: src/libavformat/smoothstreamingenc.c: In function ‘ism_flush’: src/libavformat/smoothstreamingenc.c:510:49: warning: ‘/temp’ directive output may be truncated writing 5 bytes into a region of size between 1 and 1024 [-Wformat-truncation=] snprintf(filename, sizeof(filename), "%s/temp", os->dirname); ^~~~~ src/libavformat/smoothstreamingenc.c:510:9: note: ‘snprintf’ output between 6 and 1029 bytes into a destination of size 1024 snprintf(filename, sizeof(filename), "%s/temp", os->dirname); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/libavformat/smoothstreamingenc.c:538:53: warning: ‘/temp’ directive output may be truncated writing 5 bytes into a region of size between 1 and 1024 [-Wformat-truncation=] snprintf(filename, sizeof(filename), "%s/temp", os->dirname); ^~~~~ src/libavformat/smoothstreamingenc.c:538:13: note: ‘snprintf’ output between 6 and 1029 bytes into a destination of size 1024 snprintf(filename, sizeof(filename), "%s/temp", os->dirname); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ src/libavformat/smoothstreamingenc.c:545:63: warning: ‘/FragmentInfo(’ directive output may be truncated writing 14 bytes into a region of size between 1 and 1024 [-Wformat-truncation=] snprintf(header_filename, sizeof(header_filename), "%s/FragmentInfo(%s=%"PRIu64")", os->dirname, os->stream_type_tag, start_ts); ^~~~~~~~~~~~~~ src/libavformat/smoothstreamingenc.c:545:60: note: using the range [0, 18446744073709551615] for directive argument snprintf(header_filename, sizeof(header_filename), "%s/FragmentInfo(%s=%"PRIu64")", os->dirname, os->stream_type_tag, start_ts); ^~~~~~~~~~~~~~~~~~~~~~ src/libavformat/smoothstreamingenc.c:545:9: note: ‘snprintf’ output 18 or more bytes (assuming 1041) into a destination of size 1024 snprintf(header_filename, sizeof(header_filename), "%s/FragmentInfo(%s=%"PRIu64")", os->dirname, os->stream_type_tag, start_ts); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Signed-off-by: Guo, Yejun --- libavformat/smoothstreamingenc.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/libavformat/smoothstreamingenc.c b/libavformat/smoothstreamingenc.c index ba5cc27ca0..dc48bc7aa4 100644 --- a/libavformat/smoothstreamingenc.c +++ b/libavformat/smoothstreamingenc.c @@ -501,7 +501,8 @@ static int ism_flush(AVFormatContext *s, int final) for (i = 0; i < s->nb_streams; i++) { OutputStream *os = &c->streams[i]; - char filename[1024], target_filename[1024], header_filename[1024], curr_dirname[1024]; + char filename[sizeof(os->dirname) + 5], curr_dirname[1024]; + char *target_filename, *header_filename; int64_t size; int64_t start_ts, duration, moof_size; if (!os->packets_written) @@ -542,14 +543,24 @@ static int ism_flush(AVFormatContext *s, int final) return ret; } - snprintf(header_filename, sizeof(header_filename), "%s/FragmentInfo(%s=%"PRIu64")", os->dirname, os->stream_type_tag, start_ts); - snprintf(target_filename, sizeof(target_filename), "%s/Fragments(%s=%"PRIu64")", os->dirname, os->stream_type_tag, start_ts); + header_filename = av_asprintf("%s/FragmentInfo(%s=%"PRIu64")", os->dirname, os->stream_type_tag, start_ts); + target_filename = av_asprintf("%s/Fragments(%s=%"PRIu64")", os->dirname, os->stream_type_tag, start_ts); + if (!header_filename || !target_filename) { + av_freep(&target_filename); + av_freep(&header_filename); + return AVERROR(ENOMEM); + } copy_moof(s, filename, header_filename, moof_size); ret = ff_rename(filename, target_filename, s); - if (ret < 0) + if (ret < 0) { + av_freep(&target_filename); + av_freep(&header_filename); break; + } add_fragment(os, target_filename, header_filename, start_ts, duration, os->cur_start_pos, size); + av_freep(&target_filename); + av_freep(&header_filename); } if (c->window_size || (final && c->remove_at_exit)) {