From patchwork Sun Jun 14 22:36:41 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 20363 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 2EADE449042 for ; Mon, 15 Jun 2020 01:38:49 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0818968B674; Mon, 15 Jun 2020 01:38:49 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 37E8668B5C9 for ; Mon, 15 Jun 2020 01:38:46 +0300 (EEST) Received: by mail-wr1-f65.google.com with SMTP id x6so15130032wrm.13 for ; Sun, 14 Jun 2020 15:38:46 -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=H1pTitvXLUGqqzOdYsLtHrLOdLqwkdG7aWDii5zNctU=; b=dbRASpZRrw8jU0vzdVg1qojHi2sbsL2+modfdbq711rfMThNyvK7IObIZMjcVMa4uB L0eHQ23pFgreO/tmnuSQWZMSLqUudlkqsEsrrM4cXxbMvxlsMhTNN5Q2NZZSd6xHpYzb wig1Tk0budHW8UvAZCGlsL87QJYlvuUbE8X0h3XzeJomOGbtmJ3mk4vhQyif5OKMnWnw 46PyeJTmbP3BjAgAjIKtnB7CKexJDgEHoU0zZMLK6BFAxpSng3B5dDfOOd2YdVCugmce /yM+v6dUUAuAF/Q1/GTaZeET1toH22yTQEmq25yDWU7B7DVF8XDpN15vR4l+GhkAVr+M ZOqg== 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=H1pTitvXLUGqqzOdYsLtHrLOdLqwkdG7aWDii5zNctU=; b=KJpgsL9UehOMoYw+Kiu9sdg6YBWHqDMpUko6jI1wRHOCEt2/gQQMf+j9PlvgAOtetZ 2vYOy+TWiUOUKhUahjau4fmamIhQx1M5PiN24/bFh/RyLigwU6nqORU4puyjU7WPVVUL BMJEYTRPspgIWdqx0MRmqPgBDSNBiRTZww5qSF03gMiantQ4nmU+Vy7i5tYECkgUFxIb Kz/yOSLOvt4BsRYwNDesyg4burec4UGoi2BHYS5Uij30C4QkolKM56NALJmZ9iYTsD/J Il54GneQ9+YLiIDxFGXknhnK55s8xVMWPkwfXWjVFZgm2/5sBkVxwjABk8yJnZp/PScn sT0A== X-Gm-Message-State: AOAM532krxNtVllo7+Zqt0x/7boiYGvb6NsFV/RiR5luvYpZKoTMZZDq QQr2YJ68usyo/L4BW5bvB+ECbx/Z X-Google-Smtp-Source: ABdhPJyJONyBz8lbHFujTN6+Osr/vXj66A28UlRatnKjDPdPAU8ZL3CX/5XbG7REg22AKkPxCIXIkA== X-Received: by 2002:adf:ea11:: with SMTP id q17mr25306265wrm.75.1592174325318; Sun, 14 Jun 2020 15:38:45 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id z8sm21491034wru.33.2020.06.14.15.38.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 14 Jun 2020 15:38:44 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 15 Jun 2020 00:36:41 +0200 Message-Id: <20200614223656.21338-11-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200614223656.21338-1-andreas.rheinhardt@gmail.com> References: <20200614223656.21338-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 11/26] avformat/microdvddec: Fix memleak upon read header failure 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" The already parsed subtitles (contained in an FFDemuxSubtitlesQueue) would leak if an error happened upon reading a subsequent subtitle or when allocating extradata. Signed-off-by: Andreas Rheinhardt --- libavformat/microdvddec.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/libavformat/microdvddec.c b/libavformat/microdvddec.c index 08e6fca09c..8759200f88 100644 --- a/libavformat/microdvddec.c +++ b/libavformat/microdvddec.c @@ -81,7 +81,7 @@ static int microdvd_read_header(AVFormatContext *s) AVRational pts_info = (AVRational){ 2997, 125 }; /* default: 23.976 fps */ MicroDVDContext *microdvd = s->priv_data; AVStream *st = avformat_new_stream(s, NULL); - int i = 0; + int i = 0, ret; char line_buf[MAX_LINESIZE]; int has_real_fps = 0; @@ -117,10 +117,10 @@ static int microdvd_read_header(AVFormatContext *s) continue; } if (!st->codecpar->extradata && sscanf(line, "{DEFAULT}{}%c", &c) == 1) { - int ret, size = strlen(line + 11); + int size = strlen(line + 11); ret = ff_alloc_extradata(st->codecpar, size); if (ret < 0) - return ret; + goto fail; memcpy(st->codecpar->extradata, line + 11, size); continue; } @@ -138,8 +138,10 @@ static int microdvd_read_header(AVFormatContext *s) if (!*p) continue; sub = ff_subtitles_queue_insert(µdvd->q, p, strlen(p), 0); - if (!sub) - return AVERROR(ENOMEM); + if (!sub) { + ret = AVERROR(ENOMEM); + goto fail; + } sub->pos = pos; sub->pts = get_pts(line); sub->duration = get_duration(line); @@ -156,6 +158,9 @@ static int microdvd_read_header(AVFormatContext *s) st->codecpar->codec_type = AVMEDIA_TYPE_SUBTITLE; st->codecpar->codec_id = AV_CODEC_ID_MICRODVD; return 0; +fail: + ff_subtitles_queue_clean(µdvd->q); + return ret; } static int microdvd_read_packet(AVFormatContext *s, AVPacket *pkt)