From patchwork Sun Oct 11 20:32:05 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andriy Gelman X-Patchwork-Id: 22854 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 DC438449FFD for ; Sun, 11 Oct 2020 23:32:32 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id BB7F068BB2E; Sun, 11 Oct 2020 23:32:32 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f194.google.com (mail-qk1-f194.google.com [209.85.222.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6A3C168BACE for ; Sun, 11 Oct 2020 23:32:26 +0300 (EEST) Received: by mail-qk1-f194.google.com with SMTP id a23so16013602qkg.13 for ; Sun, 11 Oct 2020 13:32:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8PP/WhtMcz42IZ5awuyhYSM+hZ6n446iuCOZ7aIBmYo=; b=IGNqvSwqDz7S+tVChPdHTDs64YYoPZl5x+VO59gGDqHjGOPGCueHSQM1OlXMOytHot agAJaV+9hoVKvMFWeSlpuD31PZHAL2IgKZeqEyev4QO05qDv3aY2+cJZRuEqEn/9ALlS HPCh48pKD8RKyqm9qQffdIy9qnE/fu+udGhAqxTxHda+Z9e/904/ev7bPrr3EoKFKrc8 zyT15WkfUfz3e51IRdzJ30oCRY8Fn+xPIltQdY/Uys62EF8ILSW2ryN4SWv3xFmJqW0G jAaDeF0nmALNoiEXF+KEbGUBeJt5IMGH/qr0L0Us5lzTja2uCQBW8Txz0HWz6orDVJlr yQgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8PP/WhtMcz42IZ5awuyhYSM+hZ6n446iuCOZ7aIBmYo=; b=dLNYSy7DneDUXgOZj9XnDJNTyUJsqWOsrqDKEC1LU14HJZ1S/BgnevfkJ3USk/6LxC j0fbjHpWcY+MaWltKTyJbWYtlDiL8Fa+uDwX+XLheRda81PS5HLXftCIRdT2sOdzQYbl FTkcUQ6dOqIIC4kfVcyADqSg2nsy1R47N5unFT317D3lQNrI5cIuG1zcpUXx9KfzAhaC pklK0tTR6JrW+Elzgis2qSY7zpJn28uHirrfFhHqDfKrgg28A7BQ5Hp2nomFJ2NAOUMt rCEHtko0L6LU0LQGL5eRNp1H6xnX4R56DAWw3vl8W/nT6ISHJa+/rOL/eAkQZ9FvHbZt QNvg== X-Gm-Message-State: AOAM530jQWvFsVwU7Seeh5ER0+qy2WncFvYfrRK3Gt7yTk/pNAeEZ/j/ lU8U2Hhwtm0WBOwOMkfw3kx5LiyzNW0= X-Google-Smtp-Source: ABdhPJwmqs59lDsqRXg+fOWb7g03++SuLEfFZlQ8zwRbyiIHEqswok/l1ph08sqAf3peoX3aMfIaUg== X-Received: by 2002:a37:5cc2:: with SMTP id q185mr6655296qkb.35.1602448344705; Sun, 11 Oct 2020 13:32:24 -0700 (PDT) Received: from localhost.localdomain (c-71-232-27-28.hsd1.ma.comcast.net. [71.232.27.28]) by smtp.gmail.com with ESMTPSA id n7sm11164785qtp.93.2020.10.11.13.32.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 11 Oct 2020 13:32:24 -0700 (PDT) From: Andriy Gelman X-Google-Original-From: Andriy Gelman To: ffmpeg-devel@ffmpeg.org Date: Sun, 11 Oct 2020 16:32:05 -0400 Message-Id: <20201011203206.45261-1-andriy.gelman@gmail.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201011194623.inktd27anzeowwqy@manj> References: <20201011194623.inktd27anzeowwqy@manj> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/2] avformat/rtspdec: fix mem leaks on init fail 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: Andriy Gelman Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Andriy Gelman Fixes #6334 Signed-off-by: Andriy Gelman --- libavformat/rtspdec.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c index ef084a8b2b..d6a903c026 100644 --- a/libavformat/rtspdec.c +++ b/libavformat/rtspdec.c @@ -690,10 +690,8 @@ static int rtsp_listen(AVFormatContext *s) return 0; // We are ready for streaming } else if (methodcode == SETUP) ret = rtsp_read_setup(s, host, uri); - if (ret) { - ffurl_close(rt->rtsp_hd); + if (ret) return AVERROR_INVALIDDATA; - } } } @@ -719,7 +717,7 @@ static int rtsp_read_header(AVFormatContext *s) if (rt->rtsp_flags & RTSP_FLAG_LISTEN) { ret = rtsp_listen(s); if (ret) - return ret; + goto fail; } else { ret = ff_rtsp_connect(s); if (ret) @@ -727,22 +725,26 @@ static int rtsp_read_header(AVFormatContext *s) rt->real_setup_cache = !s->nb_streams ? NULL : av_mallocz_array(s->nb_streams, 2 * sizeof(*rt->real_setup_cache)); - if (!rt->real_setup_cache && s->nb_streams) - return AVERROR(ENOMEM); + if (!rt->real_setup_cache && s->nb_streams) { + ret = AVERROR(ENOMEM); + goto fail; + } rt->real_setup = rt->real_setup_cache + s->nb_streams; if (rt->initial_pause) { /* do not start immediately */ } else { if ((ret = rtsp_read_play(s)) < 0) { - ff_rtsp_close_streams(s); - ff_rtsp_close_connections(s); - return ret; + goto fail; } } } return 0; + +fail: + rtsp_read_close(s); + return ret; } int ff_rtsp_tcp_read_packet(AVFormatContext *s, RTSPStream **prtsp_st,