From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id 1CE654C5C0 for ; Wed, 25 Jun 2025 15:39:14 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id E9CAC68CD6E; Wed, 25 Jun 2025 18:38:50 +0300 (EEST) Received: from mail-pf1-f195.google.com (mail-pf1-f195.google.com [209.85.210.195]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id E0FC3687AC8 for ; Wed, 25 Jun 2025 18:38:43 +0300 (EEST) Received: by mail-pf1-f195.google.com with SMTP id d2e1a72fcca58-7490702fc7cso69707b3a.1 for ; Wed, 25 Jun 2025 08:38:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750865922; x=1751470722; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1PrKLJyEnnw0BK9zhSbpPQGNIU6jVDthexAx5h9jouw=; b=erxHha7fAlIfZYCg8SZmdmfYQmMTkjp9jE8fFHgVZePHnIvmaZCfWLSWoXz4BNf5E8 VspKb5ZVpF05CFy/S+B3xwli1Gw1QZAvhig+kd3ugT7KpJetIKdM4d1oVCIzhkgBhM9U J+lUrteJ2su81wWhuaBMx+ZFZaz/BnM+T2mN05x4d/gnGVvZOupSOaWEBgK1O+NZbe89 jNn4hGyZhOoU6wKyIfjQ79vbFO3bNwP6AihYfO0uWOkiZc+pDE1bwVAYLm5kl1nClTbg 7J5d9usF0HYLd1qVo141Iw+4kcxX7X0CnG6Bq4qpOPpPrwxp8QyVINUkhKaTm6b2/voB kqoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750865922; x=1751470722; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1PrKLJyEnnw0BK9zhSbpPQGNIU6jVDthexAx5h9jouw=; b=DL9Vn6jDlTyRXtFf+Kit2DqF/yArARYDzFijkMr3LxcrBDFwFxNjRAbzq7hPz1eqUP ZcWTOIzMm0w9ZnRr8IXA5639gAOUwnt3PcwH+ileNWz+GJit3TNQwsH7E8br2co5XIYe z0HkLG2W9/1KnlNHgnZL0qzgsSQfOmPaqnHSRY//A2D0QJyvDQLFhVwFUorSb4neN87M JQlbX7sPTvEEz+6fZJY1s7ADrAvT5rb7necQ/1/h4fh8gjaOAgii7WBUiy77OvOOD6nz o4xd5tAWFpynSIGrj2op8q/jbrkGOhGNAwU/v2OAIoyyokfRC+UHlBEXW8xE2r7svqFP RWgQ== X-Gm-Message-State: AOJu0Ywl9J17cxe0mJy2CMLBE/AL4//uOPJyBLU3XWQGJpSXEGx3qpm3 DLa+jRkgyw0pLv8kSMxuHKU1L81U7+7VoKybS3CY3/PDFpg27urbX3gtWwQ7rAY6THY= X-Gm-Gg: ASbGnct2ic+KftlBiNRYR5kfDiZmb3u/srVXKR5P9Y7C9DuZct7kUab3i9b4pKsgbDO o+u2v6Ckm8wfSy7iqt1tpPzHZduC//B1HiYp4I0PUIbtCZiRZp6r7pzgUVmWWS1f62aG/btLvKQ L+yJQFk0dSz4BFVfEFSRzknAnEzKEzk24yzz6nsRhisjFY2Xl+oeBaYlkJ2vWYovfOzhg7FHCU6 /SOm22sgrAk43nFHmy6BfVI7r5UIRVbs42H4SMufhz/rMNqduiORi3AZ7ZpBGPbEgwKj2Kz58cw tGAyuLLlxi3/xgKWBSAEIXtNo9HoooJFopwXe09BW4+y5FDNa7llWci5LlFpLpXOp7X2 X-Google-Smtp-Source: AGHT+IEZd3tUp9ASlD27Y32dGm6jin8+xzyYyow+FV3tQUd+Rb8SzKkkDTNJWCcQfF2P57a621lH5g== X-Received: by 2002:a05:6a20:2454:b0:220:33ae:dabb with SMTP id adf61e73a8af0-2208c610efbmr526242637.29.1750865921839; Wed, 25 Jun 2025 08:38:41 -0700 (PDT) Received: from r760 ([188.253.126.207]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-749c88723e9sm4690493b3a.153.2025.06.25.08.38.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 25 Jun 2025 08:38:41 -0700 (PDT) From: Lidong Yan X-Google-Original-From: Lidong Yan <502024330056@smail.nju.edu.cn> To: ffmpeg-devel@ffmpeg.org Date: Wed, 25 Jun 2025 23:38:31 +0800 Message-ID: <20250625153831.2268905-3-502024330056@smail.nju.edu.cn> X-Mailer: git-send-email 2.50.0.108.g6ae0c543ae In-Reply-To: <20250625153831.2268905-1-502024330056@smail.nju.edu.cn> References: <20250625153831.2268905-1-502024330056@smail.nju.edu.cn> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/2] avformat/sapenc: fix leak in sap_write_header() 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: Lidong Yan <502024330056@smail.nju.edu.cn> Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: In sap_write_header(), ff_format_set_url() assign new allocated new_url to contexts[i]->url but forgot to free it later. Add for loop to free contexts[i]->url before av_free(context). To prevent from writing free-for-loop in every return point, replace `return 0` with `ret = 0` so normal execution can fall through cleanup code. Since normal code execution now go through code after fail label, replace fail label with cleanup label. Signed-off-by: Lidong Yan <502024330056@smail.nju.edu.cn> --- libavformat/sapenc.c | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/libavformat/sapenc.c b/libavformat/sapenc.c index 87a834a8d8..810ba4adf6 100644 --- a/libavformat/sapenc.c +++ b/libavformat/sapenc.c @@ -113,7 +113,7 @@ static int sap_write_header(AVFormatContext *s) if (getaddrinfo(host, NULL, &hints, &ai)) { av_log(s, AV_LOG_ERROR, "Unable to resolve %s\n", host); ret = AVERROR(EIO); - goto fail; + goto cleanup; } if (ai->ai_family == AF_INET) { /* Also known as sap.mcast.net */ @@ -130,7 +130,7 @@ static int sap_write_header(AVFormatContext *s) av_log(s, AV_LOG_ERROR, "Host %s resolved to unsupported " "address family\n", host); ret = AVERROR(EIO); - goto fail; + goto cleanup; } freeaddrinfo(ai); } @@ -138,7 +138,7 @@ static int sap_write_header(AVFormatContext *s) contexts = av_calloc(s->nb_streams, sizeof(*contexts)); if (!contexts) { ret = AVERROR(ENOMEM); - goto fail; + goto cleanup; } if (s->start_time_realtime == 0 || s->start_time_realtime == AV_NOPTS_VALUE) @@ -156,17 +156,17 @@ static int sap_write_header(AVFormatContext *s) s->protocol_whitelist, s->protocol_blacklist, NULL); if (ret) { ret = AVERROR(EIO); - goto fail; + goto cleanup; } ret = ff_rtp_chain_mux_open(&contexts[i], s, s->streams[i], fd, 0, i); if (ret < 0) - goto fail; + goto cleanup; s->streams[i]->priv_data = contexts[i]; s->streams[i]->time_base = contexts[i]->streams[0]->time_base; new_url = av_strdup(url); if (!new_url) { ret = AVERROR(ENOMEM); - goto fail; + goto cleanup; } ff_format_set_url(contexts[i], new_url); } @@ -181,13 +181,13 @@ static int sap_write_header(AVFormatContext *s) s->protocol_whitelist, s->protocol_blacklist, NULL); if (ret) { ret = AVERROR(EIO); - goto fail; + goto cleanup; } udp_fd = ffurl_get_file_handle(sap->ann_fd); if (getsockname(udp_fd, (struct sockaddr*) &localaddr, &addrlen)) { ret = AVERROR(EIO); - goto fail; + goto cleanup; } if (localaddr.ss_family != AF_INET #if HAVE_STRUCT_SOCKADDR_IN6 @@ -196,13 +196,13 @@ static int sap_write_header(AVFormatContext *s) ) { av_log(s, AV_LOG_ERROR, "Unsupported protocol family\n"); ret = AVERROR(EIO); - goto fail; + goto cleanup; } sap->ann_size = 8192; sap->ann = av_mallocz(sap->ann_size); if (!sap->ann) { ret = AVERROR(EIO); - goto fail; + goto cleanup; } sap->ann[pos] = (1 << 5); #if HAVE_STRUCT_SOCKADDR_IN6 @@ -231,9 +231,8 @@ static int sap_write_header(AVFormatContext *s) if (av_sdp_create(contexts, s->nb_streams, &sap->ann[pos], sap->ann_size - pos)) { ret = AVERROR_INVALIDDATA; - goto fail; + goto cleanup; } - av_freep(&contexts); av_log(s, AV_LOG_VERBOSE, "SDP:\n%s\n", &sap->ann[pos]); pos += strlen(&sap->ann[pos]); sap->ann_size = pos; @@ -241,14 +240,18 @@ static int sap_write_header(AVFormatContext *s) if (sap->ann_size > sap->ann_fd->max_packet_size) { av_log(s, AV_LOG_ERROR, "Announcement too large to send in one " "packet\n"); - goto fail; + goto cleanup; } - return 0; + ret = 0; -fail: +cleanup: + for (i = 0; i < s->nb_streams; i++) + if (contexts[i]) + av_free(contexts[i]->url); av_free(contexts); - sap_write_close(s); + if (ret < 0) + sap_write_close(s); return ret; } -- 2.50.0.108.g6ae0c543ae _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".