From patchwork Sat Apr 18 19:54:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 19068 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 3955F44B8F6 for ; Sat, 18 Apr 2020 22:54:44 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1E72C68B81D; Sat, 18 Apr 2020 22:54:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f68.google.com (mail-wr1-f68.google.com [209.85.221.68]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 109F768B329 for ; Sat, 18 Apr 2020 22:54:37 +0300 (EEST) Received: by mail-wr1-f68.google.com with SMTP id t14so7068791wrw.12 for ; Sat, 18 Apr 2020 12:54:37 -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:mime-version :content-transfer-encoding; bh=PFjq4B9+4U7o31/qHnKWWwdeaZKy1eyAKw8Y4Rm51XY=; b=R3HH2AZzcJsbpxsLblGVDfa1Mw5k9Y1JK+JClx1aceTBRvDjMb+OOABdHkAwDnh/vD uT/GLYwaCEftF2xOJftZc2SYUxMBSkqA+Lc8ml5k7XbnSoffl8dh6OlBRTHDzXGT8Vjh ZFoeFGPbetDpSIylY6LbD3avmheUsvjyRiTg22KjrWSzCJncorxZrPu37OBUUIu8gevo kbwG3relajasxoMqWHNatd7A48FixWmrlqmEFE71hzPLGgranuQCjsraPoElf0LFzrlP bURaI39QAaSNB5pAYFOPMjme/5ctyLkucGCnIen0DOKYApkK1As2vluTApahDXn+WQEZ lNdg== 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:mime-version :content-transfer-encoding; bh=PFjq4B9+4U7o31/qHnKWWwdeaZKy1eyAKw8Y4Rm51XY=; b=Rj9r9BjHeuTe/45ZL4jzu+hBSz1Jn/yGObbtrFVzp6XkhtDmGdekvNLb0gqJ95r3Er 5Qfkh9Nzx/QEPlHNKA1CAyWmB3BHFVD8jFBU2LWyzSXs0dWnbr/EZ/XHpsW4HTwQJNYC pIP0MzMGn0hSnH9j1/cQVMOgDa0KBK408xeQZNzUWlAbqM5tRZw2bEwnkX9wiS39GygJ hnhzmLkMmqXbA0V+4JtvAomeU9TkUpKizHN8OfQjssXk8THMQKvZEXVAT0JCuk3kWNEJ TJOBgRM9DfhjE4as5X2wcMvA442eXteMx+ZrgfNyuK0YJMvhCeC+Udml/s3TqdaHL5NZ xujA== X-Gm-Message-State: AGi0Pua5Rlv4HHieyaeT2+aJFT4kABM3fikRxEP5e5fuJDopXmR4YS1E zU2p44Mf03r8GOE7X4MRE1lXN6Q6 X-Google-Smtp-Source: APiQypJ2eXMcv9/7zbcOvtmUJI2rdTHzME06DScxT+QLr2GDosbYIvqW2uBUj0K2VZjI9ldm0EiIsw== X-Received: by 2002:a5d:4042:: with SMTP id w2mr9677564wrp.195.1587239676227; Sat, 18 Apr 2020 12:54:36 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id k3sm28937290wru.90.2020.04.18.12.54.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Apr 2020 12:54:35 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 18 Apr 2020 21:54:26 +0200 Message-Id: <20200418195426.25674-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat/utils: Fix memleak when decoding subtitle in find_stream_info 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" avformat_find_stream_info() may decode some frames to get stream information. And when it does this for subtitles, the decoded subtitles leak. (Decoding subtitles was added in b1511e00f6fefde6cb31b2e17f7812cfac1c8bd6 for PGS subtitles. When PGS subtitles originate from a container that exports every segment as a packet of its own, no output will be generated when decoding a packet, because not enough input is available. Yet when used with PGS subtitles in the Matroska form a single packet contains enough data to generate output. Yet said output is not freed, hence this leak.) Signed-off-by: Andreas Rheinhardt --- As soon as the new pgs_frame_merge bsf gets merged, we can add a test that remuxes the sub/pgs_sub.sup file from the fate suite to Matroska and reads/decodes the resulting file. Such a test would have caught this. libavformat/utils.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libavformat/utils.c b/libavformat/utils.c index a58e47fabc..6b72c657d8 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -3125,6 +3125,8 @@ static int try_decode_frame(AVFormatContext *s, AVStream *st, } else if (avctx->codec_type == AVMEDIA_TYPE_SUBTITLE) { ret = avcodec_decode_subtitle2(avctx, &subtitle, &got_picture, &pkt); + if (got_picture) + avsubtitle_free(&subtitle); if (ret >= 0) pkt.size = 0; }